这个线程是一个扩展,从以前可以找到here .说,我有一个代码,服务于两个目的:
1.打印一个整数列表中的最大值,
1.创建一个新的dir。
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 when run through terminal: For debugging process
# args = argparse.Namespace(integers = 1, output_dir= 'mydata_223ss32')
main(args)
字符串
这些语句可以从终端执行,
python test_file.py --output_dir data/xxxx 2 2 5 --sum
型
然而,对于调试过程,我想跳过终端的使用。hpaulj的想法可以从here中找到,只是简单地修改了
if __name__=='__main__':
型
成
if __name__=='__main__':
# Disable when run through terminal: For debugging process
args = argparse.Namespace(output_dir= 'mydata')
main(args)
型
然而,我也想在调试过程中包括一个整数列表。包括整数列表和目录地址如下输出错误
args = argparse.Namespace(integers = "2 2 5", output_dir= 'mydata')
型
2条答案
按热度按时间rqqzpn5f1#
通过将代码稍微修改为:
字符串
我们可以看到,如果我们调用脚本:
./test3.py --output_dir foo 1 2 3
我们的输出是:
型
所以,如果你想模拟命令行参数,你有两个选择:
1)编辑
sys.argv
(个人首选):型
2)创建一个
Namespace
对象:型
第二种方法有两个问题。首先,这样做跳过了调试过程中非常重要的一部分,即调试argparse配置并确保参数按预期进行解析。其次,必须在此处定义argparse配置添加的隐式默认值(例如你的
--sum
参数/accumulate
)。如果你采用第一种方法,argparse将处理sys.argv
并添加accumulate,而不需要你做任何修改。在第二种方法中,我们必须添加accumulate=sum
才能按预期运行。e5njpo682#
向[jedwards Answer][1]添加更多信息:
我使用pycharm来实现同样的目的,我需要稍微改变jedwards的命题,这样
sys.argv
就不会被覆盖,而是被修改了。列表sys.argv[0]
的第一个条目应该被保留,因为它包含了正在运行的文件的路径。如果不这样做,变量parser.prog
就会被弄乱,因此不起作用。与jedwards那样手动添加文件名作为第一个列表条目不同,你可以直接附加到
sys.argv
并扩展列表:字符串
这使得它能够适应文件名的更改。[1]:https://stackoverflow.com/a/50886791/7705525