这个线程是前一个线程的延伸,可以在这里找到。 假设我有一段代码,它有两个目的: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
然而,在调试过程中,我希望跳过终端的使用。可以在这里找到由hpaulj提出的想法,即简单修改
if __name__=='__main__':
转换为
if __name__=='__main__':
args = argparse.Namespace(output_dir= 'mydata') # Disable when run through terminal: For debugging process
main(args)
然而,在调试过程中,我也想包含一个整数列表。如果同时包含整数列表和dir地址,就会输出以下错误。
args = argparse.Namespace(integers = "2 2 5", output_dir= 'mydata')
请问我哪里做错了。
先行致谢。
.parse_args()
之前更改sys.argv
,而不是跳过解析步骤。 - jedwardssys.argv
是一个列表,其中第一项是脚本的名称,其余的是在调用脚本时传递给脚本的参数。因此,如果执行./script.py --output_dir foo 1 2 3
命令,sys.argv
将变为['script.py', '--output_dir', 'foo', '1', '2', '3']
,你可以在调用parser.parse_args()
之前随意编辑该列表。 - jedwards