您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何重构使用argparse在另一个Python脚本中可调用的脚本?

5b51 2022/1/14 8:21:49 python 字数 3305 阅读 525 来源 www.jb51.cc/python

我有一个脚本找到测试名称,并在我们公司广泛使用.它在命令行上运行,如下所示:find_test.py --type <type> --name <testname> 在脚本内部相当于:import argparse parser = argparse.ArgumentParser(description='Get Test Path

概述

我有一个脚本找到测试名称,并在我们公司广泛使用.它在命令行上运行,如下所示:

find_test.py --type 
  

在脚本内部相当于:

import argparse

parser = argparse.ArgumentParser(description='Get Test Path')
parser.add_argument('--type',dest='TYPE',type=str,default=None,help="TYPE [required]")
parser.add_argument('--name',dest='test_name',help="Test Name (Slow)")
parser.add_argument('--id',dest='test_id',help="Test ID (Fast)")
parser.add_argument('--normalise',dest='normalise',action="store_true",default=False,help="Replace '/' with '.' in Test Name")
args = parser.parse_args()

(不确定所有这些论点的作用,我个人只使用前两个).然后,这些行由使用这些参数的代码继续.

我想重构这个脚本,以便我可以将其作为模块导入,但也保留其命令行功能 – 因为很多人使用这个脚本,并且在我们的一些csh脚本中也调用它.

到目前为止我已经重构了它,就像这样:

def _main():
    
  
   __name__ == "__main__":
    _main()

  

这仍然可以从命令行运行.但我不知道如何在我的父脚本中将相关开关的参数传递给它.

如何进一步重构,然后在父脚本中调用它?
这可能吗?

我还宁愿不使用docopts,我读过的是新的argparse,除非必要 – 即不能用argparse完成,因为它没有在公司范围内安装,这可能是一个艰巨的过程.

你应该做的是移动需要运行函数代码. (因为它是外部接口,所以它不应该以_开头.)只需要从命令行运行的代码 – 即解析器的东西 – 应该保留在__name__ ==’__ main__’块中,它应该通过其结果为main().

所以:

def main(TYPE,test_name,test_id=None,normalise=False):
    # ... body of script...

if __name__ == "__main__":
    parser = ...
    ...
    args = parser.parse_args()
    main(**vars(args))

(而docopt并不是新的东西;它是一个有些人喜欢的外部库.)

总结

以上是编程之家为你收集整理的如何重构使用argparse在另一个Python脚本中可调用的脚本?全部内容,希望文章能够帮你解决如何重构使用argparse在另一个Python脚本中可调用的脚本?所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶