在 python 中调试 argpars

debugging argpars in python

请问调试 argpars 函数的最佳实践是什么。

假设我有一个 py 文件 test_file.py,其中包含以下几行

# Script start
import argparse
import os
parser = argparse.ArgumentParser()
parser.add_argument(“–output_dir”, type=str, default=”/data/xx”)
args = parser.parse_args()
os.makedirs(args.output_dir)
# Script stop

以上脚本可以通过以下方式从终端执行:

python test_file.py –output_dir data/xx

但是,对于调试过程,我想避免使用终端。因此解决方法是

# other line were commented for debugging process
# Thus, active line are
# Script start
import os
args = {“output_dir”:”data/xx”}
os.makedirs(args.output_dir)
#Script stop

但是,我无法执行修改后的脚本。我可以知道我错过了什么吗?

你可以把它写在一个shell脚本中做你想做的事

bash:

#!/usr/bin/

cd /path/to/my/script.py
python script.py --output_dir data/xx 

如果这还不够,您可以将参数存储在 json 配置文件中

configs.json

{"output_dir": "data/xx"}

抓住他们:

import json
with open('configs.json', 'rb') as fh:
    args = json.loads(fh.read())

output_dir = args.get('output_dir')

# 'data/xx'

请注意 json 文件中键和值两边的双引号

当用作脚本时,parse_args 将生成一个 Namespace 对象,显示为:

argparse.Namespace(output_dir='data/xx')

然后

args.output_dir

将是该属性的值

在测试中你可以做几件事:

args = parser.parse_args([....])  # a 'fake' sys.argv[1:] list

args = argparse.Namespace(output_dir= 'mydata')

并像以前一样使用 args。或者直接调用

os.makedirs('data/xx')

我建议将脚本组织为:

# Script start
import argparse
import os
# this parser definition could be in a function
parser = argparse.ArgumentParser()
parser.add_argument(“–output_dir”, type=str, default=”/data/xx”)

def main(args):
    os.makedirs(args.output_dir)

if __name__=='__main__':
    args = parser.parse_args()
    main(args)

这样,导入文件时 parse_args 步骤就不会 运行 了。无论您是将 args Namespace 传递给 main 还是传递 args.output_dir 之类的值,或者字典等,都是您的选择。