不太确定该如何表达, 但是我正在将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
非常感谢您的帮助!
答案 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()