如何调用需要 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'])
不太确定如何表达这个, 但我正在将 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'])