python - 你如何使用 argparse 获取程序的名称?

标签 python argparse

我正在使用 argparse 来解析命令行参数。在浏览 argparse 的文档时我只能看到使用不同程序名称的规定。

我希望能够使用默认程序名称而不必导入 sys。据我所知,argparse 中没有任何内容会返回程序名称。

import argparse

parser = argparse.ArgumentParser()
args = parser.parse_args()

print(dir(args))

这是输出:

['__class__', '__contains__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__' , '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', ' __sizeof__', '__str__', '__subclasshook__', '__weakref__', '_get_args', '_get_kwargs']

有没有其他方法可以在不导入 sys 模块的情况下检索程序名称?

最佳答案

ArgumentParser 实例有一个 prog 属性,我认为这是你想要的。

import argparse

parser = argparse.ArgumentParser()
print('parser.prog: {}'.format(parser.prog))

我通过阅读 Lib/argparse.py 中的模块源代码发现了这一点—具体查看 类 ArgumentParser definition .由于该属性的名称不以下划线字符开头,因此我认为它是公开的。

更新

我看到,至少现在,ArgumentParser 实例的 prog 属性(或者自问这个问题以来一直是)记录在 Python 2's documentation 中和 Python 3's documentation .

所以,是的,它绝对是公开的,并且在两个版本中,如果在创建 ArgumentParser 时未将其作为关键字参数提供,则默认为 prog = _os.path.basename (_sys.argv[0])(其中 _os_sys 是私有(private)的 argparse 模块属性,对应于它们的非下划线- 前缀的副本。请注意,由于使用了 os.basename(),这将只是脚本的文件名,而不是可能的完整路径(它是操作系统依赖)已经在 sys.argv[0] 中。

关于python - 你如何使用 argparse 获取程序的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25297792/

相关文章:

python - 将 HTML 表解析为 Python 列表?

python - 将 JSON 日期字符串规范化为 UTC python

python - Airflow PythonVirtualenvOperator,没有那个文件或目录 : 'virtualenv'

python - 一个破折号中包含多个可选标志的 argparse

c++ - 绘制贝塞尔曲线的各个部分

python - 避免传递太多参数

python - argparse key=value 参数

python - 使用 argparse.ArgumentParser() 获取分组结构

python argparse,如何通过名称引用参数

python - 对 argparse 感到困惑