如何在 Python 中处理命令行参数? [复制]

2024-01-03

如果我期望像 001 或 999 这样的东西(这次让我们将期望限制在 001...999 范围),并且传递的其他参数很少,并且希望忽略任何意外的参数,那么处理命令行参数的简单表达式是什么?

我知道,例如,如果我需要查明“调试”是否在参数之间传递,那么它会是这样的:

if 'debug' in argv[1:]:
  print 'Will be running in debug mode.'

如何知道009或575是否通过?

所有这些都是预期的电话:

python script.py
python script.py 011
python script.py 256 debug
python script.py 391 xls
python script.py 999 debug pdf

此时我不关心这样的调用:

python script.py 001 002 245 568
python script.py some unexpected argument
python script.py 0001
python script.py 02

...第一个 - 因为多个“数字”参数;第二-因为……嗯,意想不到的争论;第三和第四 - 因为非 3 位数的参数。


正如其他人回答的那样, optparse 是最好的选择,但如果您只想快速编写代码,请尝试以下操作:

import sys, re

first_re = re.compile(r'^\d{3}$')

if len(sys.argv) > 1:

    if first_re.match(sys.argv[1]):
        print "Primary argument is : ", sys.argv[1]
    else:
        raise ValueError("First argument should be ...")

    args = sys.argv[2:]

else:

    args = ()

# ... anywhere in code ...

if 'debug' in args:
    print 'debug flag'

if 'xls' in args:
    print 'xls flag'

EDIT:这是一个 optparse 示例,因为很多人都在回答 optparse ,但没​​有真正解释原因,或解释必须更改哪些内容才能使其正常工作。

使用 optparse 的主要原因是它为您以后的扩展提供了更大的灵活性,并为您在命令行上提供了更大的灵活性。换句话说,您的选项可以以任何顺序出现,并且使用消息会自动生成。但是,要使其与 optparse 一起使用,您需要更改规范以将“-”或“--”放在可选参数前面,并且需要允许所有参数按任何顺序排列。

这是一个使用 optparse 的示例:

import sys, re, optparse

first_re = re.compile(r'^\d{3}$')

parser = optparse.OptionParser()
parser.set_defaults(debug=False,xls=False)
parser.add_option('--debug', action='store_true', dest='debug')
parser.add_option('--xls', action='store_true', dest='xls')
(options, args) = parser.parse_args()

if len(args) == 1:
    if first_re.match(args[0]):
        print "Primary argument is : ", args[0]
    else:
        raise ValueError("First argument should be ...")
elif len(args) > 1:
    raise ValueError("Too many command line arguments")

if options.debug:
    print 'debug flag'

if options.xls:
    print 'xls flag'

optparse 和您的规范的区别在于,现在您可以使用如下命令行:

python script.py --debug --xls 001

您可以通过调用 parser.add_option() 轻松添加新选项

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Python 中处理命令行参数? [复制] 的相关文章

  • Pytorch - 推断线性层 in_features

    我正在构建一个玩具模型来获取一些图像并进行分类 我的模型看起来像 conv2d gt pool gt conv2d gt linear gt linear 我的问题是 当我们创建模型时 我们必须计算第一个线性层的大小in features基
  • Keras model.summary() 结果 - 了解参数数量

    我有一个简单的神经网络模型 用于使用 Keras Theano 后端 从用 python 编写的 28x28px 图像中检测手写数字 model0 Sequential number of epochs to train for nb ep
  • 使用 glGetFloatv 检索 pyglet 中的模型视图矩阵

    我正在使用 pyglet 在 python 中进行 3D 可视化 并且需要检索模型视图和投影矩阵来进行一些选择 我使用以下方式定义我的窗口 from pyglet gl import from pyglet window import wi
  • 将文件标记为从 Python 中删除?

    在我的一个脚本中 我需要删除当时可能正在使用的文件 我知道我无法删除正在使用的文件 直到它不再使用为止 但我也知道我可以将该文件标记为由操作系统 Windows XP 删除 我将如何在 Python 中做到这一点 以及另一个不依赖于 pyw
  • Python实时读取串口数据

    我正在使用 Python 中的脚本通过串行端口以 2Mbps 的速度从 PIC 微控制器收集数据 PIC 在 2Mbps 下完美定时工作 FTDI USB 串行端口在 2Mbps 下工作也很好 均通过示波器验证 我每秒发送消息 大小约为 1
  • 自定义 Keras 损失函数中的 conv2d

    我正在尝试基于两个图像的拉普拉斯算子在带有 TF 后端的 Keras 中实现自定义损失函数 def blur loss y true y pred weighting of blur loss alpha 1 mae losses mean
  • 如何从 Python 3.5 降级到 3.4

    我想安装 kivy 链接在这里 https kivy org docs installation installation windows html install win dist 用于项目 但是 当尝试使用 pip 安装它所依赖的包时
  • 使用 matplotlib 设置或固定二元分布值

    I ve animated a bivariate gaussian distribution using matplotlib 我已经计算过这个distribution通过调整COV matrix来考虑特定的变量 我可以提供有关此过程的更
  • 模拟类:Mock() 还是 patch()?

    我在用mock http www voidspace org uk python mock index html使用Python 想知道这两种方法中哪一种更好 阅读 更Pythonic 方法一 只需创建一个模拟对象并使用它 代码如下 def
  • 如何打印和显示子进程 stdout 和 stderr 输出而不失真?

    也许有人可以帮助我解决这个问题 我在 SO 上看到了许多与此类似的问题 但没有一个问题同时处理标准输出和标准错误 也没有处理像我这样的情况 因此出现了这个新问题 我有一个 python 函数 它打开一个子进程 等待它完成 然后输出返回代码以
  • 保存游戏最高分?

    我使用 pygame 在 python 中制作了一个非常简单的游戏 分数取决于玩家达到的级别 我将级别作为变量称为score 我想在游戏开始或结束时显示顶级 我会更乐意显示多个分数 但我见过的所有其他线程都太复杂 我无法理解 所以请保持简单
  • 收到“/:未找到事件。”使用 PyCharm 远程调试器时

    当我使用 PyCharm 通过 ssh 进行远程调试时tcsh shell 服务器 很多时候它停止工作 并显示 未找到事件 更具体地说 我在 pycharm 调试控制台中遇到以下内容 ssh username hostserver 22 p
  • 如何使用 selenium 获取 javascript 结果?

    我有以下代码 from selenium import selenium selenium selenium localhost 4444 chrome http some site com selenium start sel selen
  • 尝试将 cuda 与 pytorch 一起使用时出现运行时错误 999

    我为我的 Geforce 2080 ti 安装了 Cuda 10 1 和最新的 Nvidia 驱动程序 我尝试运行一个基本脚本来测试 pytorch 是否正常工作 但出现以下错误 RuntimeError cuda runtime erro
  • 执行许多插入重复键更新错误:未使用所有参数

    所以我一直在尝试使用 python 2 7 15 使用 mysql connector 执行此查询 但由于某种原因 它似乎不起作用并且总是返回错误 并非所有参数都被使用 表更新有一个主键 即 ID 这是我尝试运行此 SQL 的查询 sql
  • 如何从 IDLE 命令行运行 Python 脚本?

    在 bash shell 中 我可以使用 bash 或 source 手动调用脚本 我可以在 Python IDLE 的交互式 shell 中做类似的事情吗 我知道我可以转到文件 gt gt 打开模块 然后在单独的窗口中运行它 但这很麻烦
  • PyMC3 和 Theano - 导入 pymc3 后,有效的 Theano 代码停止工作

    一些简单的 theano 代码可以完美运行 当我导入 pymc3 时停止工作 这里有一些片段可以重现错误 Initial Theano Code this works import theano tensor as tsr x tsr ds
  • 混合两个列表的Pythonic方法[重复]

    这个问题在这里已经有答案了 我有两个长度为 n 和 n 1 的列表 a 1 a 2 a n b 1 b 2 b n 1 我想要一个函数作为结果给出一个列表 其中包含两个中的替代元素 即 b 1 a 1 b n a n b n 1 以下方法有
  • 将 .parquet 编码为 io.Bytes

    目标 将 Parquet 文件上传到 MinIO 这需要将文件转换为字节 我已经能够做到这一点了 csv json and txt bytes data to csv encode utf 8 bytes json dumps self d
  • 真实值与预测值的降维可视化

    我有一个数据框 如下所示 label predicted F1 F2 F3 F40 major minor 2 1 4 major major 1 0 10 minor patch 4 3 23 major patch 2 1 11 min

随机推荐

  • 如何更改嵌套字典中的值

    我需要更改嵌套字典中的值 考虑这本字典 stocks name stocks IBM 146 48 MSFT 44 11 CSCO 25 54 micro name micro age 1 我需要循环遍历所有键并更改所有值name keys
  • 为什么我丢失了会话变量?

    我使用 MVC 并使用 KnockoputJS 我从 2 个选择中选择值 在第一个选择中 我选择 IDCompany 在第二个选择中 我选择 IDSubsidiary 我将 Json 中的模型发送到控制器中的 JsonResult 然后创建
  • 为什么经典的 ASP 服务器端包含包含在注释中?

    为什么服务器端包含的语法是 将语义上有意义的内容放在注释中似乎很尴尬且具有误导性 事实上 当我第一次看到这种语法时 我认为它是一个已被 注释掉 的包含内容 设计语言使用这种语法而不是像这样的替代方案背后的原因是什么 我知道用简单的替换来解析
  • 从服务器发送文件到客户端(python)

    我目前正在编写一个服务器客户端应用程序 需要传输一些文件才能工作 我正在使用这个方法 client file to send raw input gt try f open sent files file to send rb except
  • 如何避免工具提示中出现阴影?

    我开发了一个 ToolTip 控件 并将其注册为 ToolTip 代码如下 protected override CreateParams CreateParams get CreateParams param base CreatePar
  • Rails - 警告:无法批量分配受保护的属性

    从这里继续 Rails 表单问题 https stackoverflow com questions 6058486 rails form problems 每次我尝试创建一个新的group membership我明白了 WARNING C
  • Rails db:种子错误“未定义方法‘finder_needs_type_condition?’对于 nil:NilClass"

    我在尝试填充 sqlite 数据库时遇到问题 关于特定错误 finder needs type condition 的信息不多 我可以找到 但我没有太多使用 Rails 的经验 甚至怀疑问题可能出在哪里 Model class Charac
  • 如何使用Android相机获取全分辨率和未压缩的图像数据?

    我想获得全分辨率 而不是压缩 图像数据 然后我可以进行一些图像处理 据我所知 android api takePicture shutter raw jpg 可以做一些事情 但是我需要的不是压缩的 JPEG 数据 而是未压缩的图像数据 而且
  • 有没有 StringUtils.isNumeric 的替代方案可以实现我的意思?

    StringUtils isNumeric 对于 返回 true 对于 7 8 返回 false 这当然是有记录的行为 但对我来说确实不是最方便的 还有其他东西 最好是在 commons lang 中 提供 isActuallyNumeri
  • 如何降低firebase实时数据库下载成本? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在firebase实时数据库中制作2个数据库是否有助于降低成本并增加每天360MB的每日下载限制 降低成本最简单的方法是减少下载 你可
  • 在 JasperReports 中进行比较 if else

    我想做一个比较 例如 if
  • Order by 不适用于 LINQ 中的 Concat()

    使用 VB net 和以下 LINQ 语句 我怀疑 排序依据 不适用于Concat 我想列出用户当前拥有的项目 然后按升序列出更多可用项目 因此 首先我从数据库中选择当前项目 然后按顺序选择下一个可用项目 LINQ 忽略 order by
  • 如何在 Mac 上将 localhost 绑定到 127.0.0.1? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的本地计算机上有一个正在运行的 Web 应用程序 要访问它 我可以使用localhost 8080 但是当我尝试使用http 127 0
  • MVC3中提交数据库数据后如何清除模型

    我正在数据库中提交一些数据 提交后我想显示同一页面 但我正在查看页面 文本框值不为空 ModelState Clear 我曾经用来清除文本框 但文本框值仍然保留 请建议我在mvc3中提交后清除模型 public ActionResult A
  • 重置 DBUnit 中的序列?

    我想在 Java DBUnit 中的每次测试后重置数据库 AND 序列 我已经看到这个问题 但没有我正在努力获得的代码解决方案 如何在DBUnit中使用Oracle序列号 https stackoverflow com questions
  • 在 ruby​​ 类中调用 Knife

    我想围绕刀创建一个很好的包装类 以允许程序以可读的方式运行刀命令 我目前正在尝试使用 Chef gem 中的 Knife rb 文件作为取得成功的指南 但是 我在关闭编辑器时遇到问题 如果我运行以下代码 require chef knife
  • 过滤数据集

    我有一个充满客户的数据集 我想知道是否有任何方法可以过滤数据集并仅获取我想要的信息 例如 要得到CostumerName and CostumerAddress对于有的客户CostumerID 1 是否可以 您可以使用DataTable S
  • Twitter Bootstrap - 如何根据 @media 定义的宽度更改 css 类

    这是我的第一个问题 但我只想说这个网站多年来帮助了我无数次 我想我已经到了有自己的问题要问的阶段了 抱歉 如果问题不清楚 我会尝试详细说明 我已经为我的一些元素分配了一个过渡 这样当它们悬停在上面时它们就会向上升起 即 example ho
  • Python 使用 Beautiful Soup 对特定内容进行 HTML 处理

    所以当我决定解析网站的内容时 例如 http allrecipes com Recipe Slow Cooker Pork Chops II Detail aspx http allrecipes com Recipe Slow Cooke
  • 如何在 Python 中处理命令行参数? [复制]

    这个问题在这里已经有答案了 如果我期望像 001 或 999 这样的东西 这次让我们将期望限制在 001 999 范围 并且传递的其他参数很少 并且希望忽略任何意外的参数 那么处理命令行参数的简单表达式是什么 我知道 例如 如果我需要查明