您好我想通过shell执行以下命令。
curl -g -d '{ "action": "block_count" }' [::1]:7076
但是,当插入os.system调用时,我的语法无效。什么是正确的语法格式。
#!/usr/bin/env python
import os
import json
aba = os.system('curl -g -d '{ "action": "block_count" }' [::1]:7076')
baba = json.loads(aba)
答案 0 :(得分:4)
您可以简单地使用triple-quoted string literal,例如:
os.system('''curl -g -d '{"action": "block_count"}' [::1]:7076''')
但更好的是,使用正确的工具,即requests
:
import requests
data = requests.post('[::1]:7076', json={"action": "block_count"}).json()
如果您坚持直接curl
命令调用,请使用subprocess
模块而不是旧的os.system
模块(对于未严格检查的输入,也是不安全的)。您可以将subprocess.check_output
用作replacement in your case。没有必要在子shell中执行curl
命令,因此您可以拆分curl
的参数,例如:
import subprocess
output = subprocess.check_output(['curl', '-g', '-d', '{"action": "block_count"}', '-s', '[::1]:7076'])
data = json.loads(output)
请注意,check_output
将返回已执行命令的标准输出(如os.system
所做的那样),但如果命令失败,它将引发CalledProcessError
异常 - 零状态,如果未找到命令,则为OSError
异常。
答案 1 :(得分:1)
你需要逃避单引号。所以改变这个:
aba = os.system('curl -g -d '{ "action": "block_count" }' [::1]:7076')
到此:
aba = os.system('curl -g -d \'{ "action": "block_count" }\' [::1]:7076')