Python os.system无效语法

时间:2017-11-12 23:39:42

标签: python json python-2.7 ubuntu-16.04

您好我想通过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)

2 个答案:

答案 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')