我正在使用 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/