在 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
之类的值,或者字典等,都是您的选择。
请问调试 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
之类的值,或者字典等,都是您的选择。