我正在尝试从终端传递输入并运行python脚本,我的输入是url http://localhost:8080/api/auth
,有效载荷是{ "request":"success","input":[ { "type":" ", "content":[ { "type":" ", "meta":{ "sample_type":" " , deatail":" "} ] } ], "output":[ { "type":" ","content":[ { "type":"", "meta":{ "sample_type":"", }, "deatils":" " } ] } ] }
我的代码在这里:
def get_response():
auth_access_Token = get_token()
parser = argparse.ArgumentParser(description='A tutorial of argparse!')
parser.add_argument("--url", action="store_true", required=True )
parser.add_argument("--payload", action="store_true", required=True )
a = parser.parse_args()
url = a.url
Header = {'Auth': 'Bearer ' + str(auth_access_Token)}
payload = a.payload
resp = requests.post(url, headers=Header, json=payload)
print(json.loads(resp.content))
get_response()
当我使用
传递输入信息时python test.py --url http://localhost:8080/api/auth --payload `{ "request":"success","input":[ { "type":" ", "content":[ { "type":" ", "meta":{ "sample_type":" " , deatail":" "} ] } ], "output":[ { "type":" ","content":[ { "type":"", "meta":{ "sample_type":"", }, "deatils":" " } ] } ] }`
这给了我error: unrecognized arguments
我在哪里错了?
预先感谢
答案 0 :(得分:0)
因此,您的脚本有几个问题。
action
的值应为store
,而不是store_true
。
store_true
用于TRUE
和FALSE
的值。
第二,为了处理输入参数中的空格,必须将其用双引号引起来。由于有效载荷值包含双引号,因此必须将其替换为单引号。
这是修改后的代码
parser = argparse.ArgumentParser(description='A tutorial of argparse!')
parser.add_argument('--url', action="store", nargs=1, type=str, required=True )
parser.add_argument("--payload", nargs=1, type=str, required=True )
a = parser.parse_args()
print(a)
因此,当您像这样调用脚本时:
> python test1.py --url http://localhost:8080/api/auth --payload "{ 'request':'success','input':[ { 'type':' ', 'content':[ { 'type':' ', 'meta':{ 'sample_type':' ' , deatail':' '} ] } ], 'output':[ { 'type':' ','content':[ { 'type':'', 'meta':{ 'sample_type':'', }, 'deatils':' ' } ] } ] }"
编辑
您必须处理有效载荷数据。
我也发现您传递的数据格式不正确。
"meta":{ "sample_type":" " , deatail":" "}
,请参见deatail
之前的引号和一些匹配的花括号。
payload = a.payload[0]
payload = re.sub(r"'", "\"", payload)
resp = requests.post(url, headers=Header, json=payload)
print(json.loads(resp.content))