【发布时间】:2018-11-25 22:36:50
【问题描述】:
此线程是上一个线程的扩展,可以在here 找到。 说,我有一个代码有两个目的,1)从整数列表中打印一个最大数; 2)创建一个新目录。
import argparse
import os
parser = argparse.ArgumentParser()
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=sum,
help='sum the integers (default: find the max)')
parser.add_argument("--output_dir", type=str, default="data/xx")
def main(args):
os.makedirs(args.output_dir)
print args.accumulate(args.integers)
if __name__=='__main__':
args = parser.parse_args() # Disable during debugging @ Run through terminal
# args = argparse.Namespace(integers = 1, output_dir= 'mydata_223ss32') # Disable when run through terminal: For debugging process
main(args)
这些语句可以通过终端执行
python test_file.py --output_dir data/xxxx 2 2 5 --sum
但是,对于调试过程,我想跳过终端的使用。可以从here 中找到hpaulj 的想法只是修改了
if __name__=='__main__':
进入
if __name__=='__main__':
args = argparse.Namespace(output_dir= 'mydata') # Disable when run through terminal: For debugging process
main(args)
但是,我还想在调试过程中包含一个整数列表。包括整数列表和目录地址如下输出错误
args = argparse.Namespace(integers = "2 2 5", output_dir= 'mydata')
请问我哪里做错了。
提前致谢
【问题讨论】:
-
如果你想调试 argparse 的 解析,我建议更改
sys.argv(.parse_args()之前),而不是跳过解析步骤。 -
嗨@jedwards。我可以知道如何更改 sys.argv。谢谢
-
如果您致力于使用命名空间对象,您可能需要
Namespace(..., integers=[1, 2, 3], ...) -
嗨@jedwards,执行你的建议给我一个错误> AttributeError: 'Namespace' object has no attribute 'accumulate'
-
sys.argv只是一个列表,其中第一项是脚本的名称,其余的是您在调用时传递给脚本的参数。所以./script.py --output_dir foo 1 2 3将导致sys.argv成为['script.py', '--output_dir', 'foo', '1', '2', '3']——并且您可以在调用parser.parse_args()之前随意编辑该列表。