如何调用需要CLI参数的python方法?

时间:2018-07-25 20:17:01

标签: python command-line-interface argparse

不太确定该如何表达, 但是我正在将bash脚本转换为python,并且试图在python库中调用通常通过CLI调用的方法。该方法使用argparse并在调用时需要2个参数。

我不确定如何从单独的python脚本中调用该方法并提供两个参数。

我尝试过的事情:

>>  from somelibrary import mymethod as method
>>  method.main('foo', 'bar')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: main() takes 0 positional arguments 
but 2 were given

>>> method.main()
usage: [-h] foo bar
: error: the following arguments are required: 
foo, bar

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

几乎可以肯定该函数调用没有Python参数的Argparser.parse_args()方法:

parser.parse_args()

这将从sys.argv list中获取参数,并接受除第一个元素以外的所有元素。

sys.argv只是一个列表,因此您可以设置自己的列表:

import sys
from somelibrary import mymethod as method

sys.argv[1:] = ['foo', 'bar']
method()

最好,如果您可以更改项目或建议更改,则应该(要求)更新main()函数以接受参数:

def main(args=None):
    if args is None:
        args = sys.argv[1:]

    # ...

    parser.parse_args(args)

您可能需要考虑脚本是否设计成不能导入到另一个程序中(它可能会更改程序其他部分所依赖的全局状态,也可能以sys.exit()结尾并因此关闭除非明确捕获SystemExit异常,否则您的程序可能会更容易,而是使用子进程来运行脚本,

import sys
import subprocess

result = subprocess.run([sys.executable, '/path/to/somelibrary', 'foo', 'bar'])

答案 1 :(得分:0)

使用sys.argv-它包含传递给py脚本的参数。

from somelibrary import mymethod as method
>>> sys.argv[1:] = ['foo', 'bar']
>>> method.main()