gpt4 book ai didi

python - 为什么 python argparse 为导入的模块而不是当前模块提供帮助?

转载 作者:行者123 更新时间:2023-12-01 05:40:18 29 4
gpt4 key购买 nike

我有这两个简单的文件:这是tone.py:

import argparse
import os
import sys
root , pyfilename = os.path.split(os.path.abspath(__file__))

try:
parser = argparse.ArgumentParser()
parser.add_argument('--argone', help='argument one',default= "one" )
parser.add_argument('--argtwo', help='argument two',default= "two" )
parser.add_argument('--argthree', help='argument three',default= "three" )
parser.add_argument('--argfour', help='argument three',default=False )
args = parser.parse_args()
except Exception as e:
print "crapped"

class One():
pass

if __name__ == "__main__" :
while True:
print (args.argone)
print (args.argtwo)
print (args.argthree)

这是 ttwo.py:

import argparse
import os
import sys
root , pyfilename = os.path.split(os.path.abspath(__file__))

try:
from tone import One
except Exception as e:
print "cant import module coz: %s ; so i'm exiting"%e
sys.exit()


try:
import defaults
parser = argparse.ArgumentParser()
parser.add_argument('--arga', help='arga',default= "a" )
parser.add_argument('--argb', help='argb',default= "b" )
parser.add_argument('--argc', help='argc',default= "c" )
parser.add_argument('--argd', help='targd',default=False )
args = parser.parse_args()
except Exception as e:
print "crapped"


if __name__ == "__main__" :
print (args.arga)
print (args.argb)
print (args.argc)

现在,如果我使用帮助开关运行tone.py,我会得到我所期望的:

$ python  tone.py -h 
usage: tone.py [-h] [--argone ARGONE] [--argtwo ARGTWO] [--argthree ARGTHREE]
[--argfour ARGFOUR]

optional arguments:
-h, --help show this help message and exit
--argone ARGONE argument one
--argtwo ARGTWO argument two
--argthree ARGTHREE argument three
--argfour ARGFOUR argument three

但第二个给出了意想不到的结果:

$ python  ttwo.py -h 
usage: ttwo.py [-h] [--argone ARGONE] [--argtwo ARGTWO] [--argthree ARGTHREE]
[--argfour ARGFOUR]

optional arguments:
-h, --help show this help message and exit
--argone ARGONE argument one
--argtwo ARGTWO argument two
--argthree ARGTHREE argument three
--argfour ARGFOUR argument three

这是第一个模块的帮助。发生了什么?我该如何修复它?

最佳答案

您的 tone 模块在模块级别定义一个参数解析器,并在解析命令行参数时打印帮助消息

如果您只想在 tone 作为脚本运行时进行解析,请移动 parser.parse_args() 调用到您的 __main__ 测试 block :

if __name__ == '__main__':
# run as a script, not imported as a module
args = parser.parse_args()

关于python - 为什么 python argparse 为导入的模块而不是当前模块提供帮助?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17723327/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com