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

How to call python method that expects CLI arguments?

不太确定如何表达这个, 但我正在将 bash 脚本转换为 python,并且我正在尝试调用通常通过 CLI 调用的 python 库中的方法。该方法使用 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

非常感谢任何帮助!

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

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

几乎可以肯定该函数正在调用没有 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'])