我正在使用某人的GitHub代码,该代码旨在像这样从命令行调用:
> python this_script.py -u <username> -p <password> -i <id_num> ...
在this_script.py
中以这种方式解析输入后,这将产生一个输出文本文件:
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='get data', add_help=False, usage='this_script.py -u username -p password [options]')
parser.add_argument('-u', metavar='<STR>', type=str, help='username')
parser.add_argument('-p', metavar='<STR>', type=str, help='password')
parser.add_argument('-i', metavar='<STR>', nargs='+', type=str, help='List of IDs')
...
我想在自己的代码集中使用这些文本文件中的许多文本文件,因此使用如下语法将其从命令行脚本转换为可调用函数会更加方便:
def this_script(password, username, *args):
...
是否有一种简单的方法来执行此操作,而不必过多地破坏当前定义的__main__
块的内部工作原理?
答案 0 :(得分:0)
是的,简单的方法是使用stdlib runpy
。
import runpy
runpy.run_module(mod_name, init_globals=None, run_name=None, alter_sys=False)
而且,请记住不要写这样的脚本。条件下只能有一行,它应该是对不带参数的函数的调用,如下所示:
if __name__ == "__main__":
main()
什么都太多了。
答案 1 :(得分:0)
怎么样:
def do_stuff(args):
print(args.u)
print(args.p)
def main(args_list=None):
parser = argparse.ArgumentParser(description='get data', add_help=False, usage='this_script.py -u username -p password [options]')
parser.add_argument('-u', metavar='<STR>', type=str, help='username')
parser.add_argument('-p', metavar='<STR>', type=str, help='password')
parser.add_argument('-i', metavar='<STR>', nargs='+', type=str, help='List of IDs')
...
if args_list:
args= parser.parse_args(args_list)
else:
args = parser.parse_args()
do_stuff(args)
if __name__ == "__main__":
main()
这样,您可以从命令行或代码中的某个地方(例如,与:
main(['-u', 'my_username', '-p', 'my_password'])