我有一个名为test1.py
的简单脚本。
#!/usr/bin/env python
from argparse import ArgumentParser
def cmdlineparse():
parser = ArgumentParser()
parser.add_argument("-tid", dest="CHEMBL_TARGET_ID", required=True, type=str)
parser.add_argument("-molfile", dest="XTEST_MOLFILE", required=False, type=str)
args=parser.parse_args()
return args
if __name__ == '__main__':
args = cmdlineparse()
print("The given CHEMBL_TARGET_ID is %s" % args.CHEMBL_TARGET_ID)
print("The given XTEST_MOLFILE is %s" % args.XTEST_MOLFILE)
通常,我会像这样./test1.py -tid CHEMBL8868 -molfile ligands.sdf
执行它。
我想要做的是从名为test2.py
的第二个脚本中多次执行它。最简单的解决方案是使用subprocess.call
或等效的名称进行调用。
subprocess.call("./test1.py -tid CHEMBL8868 -molfile ligands.sdf".split(), shell=True, executable='/bin/bash')
但是,我想以一种更优雅的方式做到这一点,即将其作为模块导入并将值传递给argparse
。有人可以告诉我该怎么做吗?
答案 0 :(得分:2)
您需要稍微重构一下脚本:让cmdlineparse
提取要解析的参数列表,并定义一个函数main
来执行实际的工作,而不是{ {1}}。
__main__
不带参数的情况下,#!/usr/bin/env python
from argparse import ArgumentParser
def cmdlineparse(args):
parser = ArgumentParser()
parser.add_argument("-tid", dest="CHEMBL_TARGET_ID", required=True, type=str)
parser.add_argument("-molfile", dest="XTEST_MOLFILE", required=False, type=str)
args=parser.parse_args(args)
return args
def main(args=None):
args = cmdlineparse(args)
print("The given CHEMBL_TARGET_ID is %s" % args.CHEMBL_TARGET_ID)
print("The given XTEST_MOLFILE is %s" % args.XTEST_MOLFILE)
if __name__ == '__main__':
main()
将解析当前的命令行参数,因为(最终)传递给main
的{{1}}的值将导致其解析None
现在,您可以根据需要多次导入parser.parse_args()
并显式调用sys.argv[1:]
:
test1