如何调用在python文件中使用命令行工作的python脚本?

如何调用在python文件中使用命令行工作的python脚本?,python,api,Python,Api,我试图通过python文件使用一个使用命令行的api。我以前导入过各种python文件,但这一个导致了一些问题,因为我无法通过文件传递命令行参数 api调用如下所示: python bin/pythonapi.py -K 72387bc9236d73-13c1-4r1g-83c8-26329b981147 --samples -j -r '{"query":{"operator":"all","children":[{"field":"alias.ip_address","operator":"

我试图通过python文件使用一个使用命令行的api。我以前导入过各种python文件,但这一个导致了一些问题,因为我无法通过文件传递命令行参数

api调用如下所示:

python bin/pythonapi.py -K 72387bc9236d73-13c1-4r1g-83c8-26329b981147 --samples -j -r '{"query":{"operator":"all","children":[{"field":"alias.ip_address","operator":"contains","value":"192.168.1.60"}]},"scope":"private","size":50,"from":0,"sort":{"sha256":{"order":"asc"}}}'
API调用工作正常。但是,当我尝试使用我的文件调用此函数时,它无法工作,因为我会打一个回溯电话说:

TypeError: main() takes 0 positional arguments but 1 was given
我知道这意味着这里的main()函数不接受任何参数,但是API调用是如何工作的呢

用于调用此API的Python文件的代码是:

    import os, sys
    sys.path.append('/root/CARS/test/python-master/bin')
    import pythonapi as panaf

    sys.argv = '-K 72387bc9236d73-13c1-4r1g-83c8-26329b981147 --samples -j -r \'{"query":{"operator":"all","children":[{"field":"alias.ip_address","operator":"contains","value":"192.168.1.60"}]},"scope":"private","size":50,"from":0,"sort":{"sha256":{"order":"asc"}}}\''.split()
    sys.argv = ['pythonapi.py'] + sys.argv
    response = panaf.main()


    print(response)
    result = json.loads(response.text)
    print(result)
我想通过Python文件传递调用API所需的参数。我希望这是可能的,只是我不知道正确的方法

如果有人能告诉我我做错了什么,以及如何解决这个问题,那就太好了。提前谢谢

编辑-1: 在提出一些建议后,对我的代码做了一些细微的更改。但出现了一个新的追踪电话:

Expecting value: line 1 column 1 (char 0): '{"query":{"operator":"all","children":[{"field":"alias.ip_address","operator":"contains","value":"192.168.1.60"}]},"scope":"private","size":50,"from":0,"sort":{"sha256":{"order":"asc"}}}'

出于某种原因,它说我传递的json参数是错误的。是这样,还是整个逻辑都错了?

您面临的问题是您的:

sys.argv = '-K 72387bc9236d73-13c1-4r1g-83c8-26329b981147 --samples -j -r \'{"query":{"operator":"all","children":[{"field":"alias.ip_address","operator":"contains","value":"192.168.1.60"}]},"scope":"private","size":50,"from":0,"sort":{"sha256":{"order":"asc"}}}\''.split()
哪一个给出了

['-K',
 '72387bc9236d73-13c1-4r1g-83c8-26329b981147',
 '--samples',
 '-j',
 '-r',
 '\'{"query":{"operator":"all","children":[{"field":"alias.ip_address","operator":"contains","value":"192.168.1.60"}]},"scope":"private","size":50,"from":0,"sort":{"sha256":{"order":"asc"}}}\''] 
它在json参数中有
'\'
,这是导致问题的原因

您不需要对-r进行单引号转义

这就是你能做的。

sys.argv = '-K 72387bc9236d73-13c1-4r1g-83c8-26329b981147 --samples -j -r {"query":{"operator":"all","children":[{"field":"alias.ip_address","operator":"contains","value":"192.168.1.60"}]},"scope":"private","size":50,"from":0,"sort":{"sha256":{"order":"asc"}}}'.split()
结果是:列表中没有
“\”

['-K',
 '72387bc9236d73-13c1-4r1g-83c8-26329b981147',
 '--samples',
 '-j',
 '-r',
 '{"query":{"operator":"all","children":[{"field":"alias.ip_address","operator":"contains","value":"192.168.1.60"}]},"scope":"private","size":50,"from":0,"sort":{"sha256":{"order":"asc"}}}']

希望这有助于完善。谢谢你的帮助,先生+我想要的是一个美丽的解释。此外,现在我明白了它是什么故障,以及它是如何得到纠正的。再次感谢。