debugging argpars in python

血红的双手。 提交于 2019-12-08 07:19:23

问题


May I know what is the best practice to debug an argpars function.

Say I have a py file test_file.py with the following lines

# 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

The above script can be executed from terminal by:

python test_file.py –output_dir data/xx

However, for debugging process, I would like to avoid using terminal. Thus the workaround would be

# 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

However, I am unable to execute the modified script. May I know what have I miss?


回答1:


When used as a script, parse_args will produce a Namespace object, which displays as:

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

then

args.output_dir

will be the value of that attribute

In the test you could do one several things:

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

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

and use args as before. Or simply call the

os.makedirs('data/xx')

I would recommend organizing the script as:

# 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)

That way the parse_args step isn't run when the file is imported. Whether you pass the args Namespace to main or pass values like args.output_dir, or a dictionary, etc. is your choice.




回答2:


You can write it in a shell script to do what you want

bash:

#!/usr/bin/

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

If that is insufficient, you can store your args in a json config file

configs.json

{"output_dir": "data/xx"}

To grab them:

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

output_dir = args.get('output_dir')

# 'data/xx'

Do take note of the double quotes around your keys and values in the json file



来源:https://stackoverflow.com/questions/50881403/debugging-argpars-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!