如何从第二个脚本中执行包含argparse的脚本

时间:2019-05-04 13:15:34

标签: python parameter-passing argparse

我有一个名为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。有人可以告诉我该怎么做吗?

1 个答案:

答案 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