通过将代码稍微更改为:
import argparse
import sys
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) # XXX: Commented out for debugging
print(args.accumulate(args.integers))
if __name__=='__main__':
print(sys.argv)
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
print(args)
main(args)
我们可以看到,如果调用脚本时使用:
./test3.py --output_dir foo 1 2 3
我们的产出是:
['test3.py', '--output_dir', 'foo', '1', '2', '3']
Namespace(accumulate=<built-in function sum>, integers=[1, 2, 3], output_dir='foo')
6
因此,如果要模拟命令行参数,则有两个选项:
1)编辑
sys.argv
(个人首选):
if __name__=='__main__':
# Override sys.argv
sys.argv = ['test3.py', '--output_dir', 'foo', '1', '2', '3']
args = parser.parse_args()
main(args)
2)创建
Namespace
对象:
if __name__=='__main__':
#args = parser.parse_args() # Disable during debugging @ Run through terminal
args = argparse.Namespace(accumulate=sum, integers=[1,2,3], output_dir='foo')
main(args)
第二种方法的问题是双重的。首先,通过这样做,您将跳过调试过程中非常重要的一部分,调试argparse配置,并确保按预期解析参数。其次,必须在此处定义argparse配置添加的隐式默认值(例如
--sum
论点/
accumulate
)。如果采用第一种方法,argparse将处理
系统参数
并且不需要做任何更改就可以添加累积。在第二种方法中,我们必须
accumulate=sum
让它按预期运行。