【发布时间】:2019-08-31 07:01:18
【问题描述】:
我正在运行 Python 3.6.8 :: Anaconda custom(64 位)并从 argparse 得到奇怪的结果。尽管有 -x,但 trainandexecute=False 的值
def get_parameters():
startup = '-x -b'
sys.argv = startup.split(' ')
ap = argparse.ArgumentParser()
ap.add_argument('-x', '--trainandexecute', action='store_true')
ap.add_argument('-b', '--debug', action='store_true')
ap.add_argument('-d', '--rundate', action='store')
print(ap.parse_args())
return vars(ap.parse_args())
get_parameters()
这将返回以下输出。请注意,尽管有 -x 标志,但 trainandexecute=False。
Namespace(debug=True, execute=False, train=False, trainandexecute=False)
{'train': False,
'execute': False,
'trainandexecute': False,
'debug': True}
但是,此测试在下一个 Jupyter 单元中有效,并且它不是我的环境:
def get_test_parameters():
startup = '-b -x'
sys.argv = startup.split(' ')
print(sys.argv)
ap = argparse.ArgumentParser()
ap.add_argument('-x', '--x', action='store_true')
ap.add_argument('-b', '--debug', action='store_true')
print(ap.parse_args())
return vars(ap.parse_args())
所以输出:
get_test_parameters()
是:
['-b', '-x'] # print(sys.argv)
Namespace(debug=False, x=True) # print(ap.parse_args())
{'x': True, 'debug': False} # return vars(ap.parse_args())
我被骗了……
【问题讨论】:
-
sys.argv不会是['-x', '-v']如果程序实际上是使用这些参数调用的:sys.argv[0]将是程序名称,并且参数将从[1]开始。
标签: python-3.x argparse