python子进程输出到数组

时间:2017-07-19 14:07:25

标签: python subprocess

有人可以告诉我如何使用子进程获取以下命令的输出到列表中吗?

if (isset($_POST['submit'])

尝试过“subprocess.popen”,“subprocess.call”和“subprocess.popen”,但无济于事。以下是我试过的一个例子。

curl --silent -u username:password http://localhost:55672/api/queues | sed 's/,/\n/g' | grep '"name"\:' | tr -d "name:" | tr -d -d \"

运行后者时抛出的错误

import json
import subprocess

HO=subprocess.check_output("curl --silent -u username:passwordhttp://localhost:55672/api/queues | sed 's/,/\n/g' | grep '"name"\:' | tr -d "name:" | tr -d -d \"", shell=True)

print HO

请注意,该命令在shell上运行时生效,并以下面的格式生成输出

 File "./rb.py", line 10
    HO=subprocess.check_output("curl --silent -u username:password http://localhost:55672/api/queues | sed 's/,/\n/g' | grep '"name"\:' | tr -d "name:" | tr -d -d \"", shell=True)
                                                                                                                                     ^
SyntaxError: invalid syntax
[my_shell]bindo@test1:~/rbmq_test $ 

请有人帮忙吗?

3 个答案:

答案 0 :(得分:0)

看起来这个命令有许多你需要逃避的禁用角色,也许你可以试试下面的

cmd = """
curl --silent -u username:password http://localhost:55672/api/queues | sed 's/,/\n/g' | grep '"name"\:' | tr -d "name:" | tr -d -d \"
"""
subprocess.check_output(cmd)

答案 1 :(得分:0)

你在引用“名字”似乎是错误的。

您正在关闭双引号字符串,这就是您获得无效语法的原因,与命令本身无关。

尝试在name周围的引号前添加转义字符。

subprocess.check_output("curl --silent -u username:passwordhttp://localhost:55672/api/queues | sed 's/,/\n/g' | grep \"name\":' | tr -d \"name:\" | tr -d -d \"", shell=True)

或者用单个引号替换双引号,这样就不会与命令字符串冲突:

subprocess.check_output("curl --silent -u username:passwordhttp://localhost:55672/api/queues | sed 's/,/\n/g' | grep 'name':' | tr -d 'name:' | tr -d -d \"", shell=True)

根据您首先发布的命令行,似乎您需要在grep中使用双引号,因此您需要将其转义:

subprocess.check_output("curl --silent -u username:passwordhttp://localhost:55672/api/queues | sed 's/,/\n/g' | grep '\"name\"':' | tr -d 'name:' | tr -d -d \"", shell=True)

答案 2 :(得分:0)

可能是晚了,但这很有用:

import subprocess

# cmd contains shell command
cmd="curl --silent -u username:passwordhttp://localhost:55672/api/queues | sed 's/,/\n/g' | grep '"name"\:' | tr -d "name:" | tr -d -d \""

process = subprocess.Popen(cmd,shell=True,stdin=None,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
# The output from your shell command
result=process.stdout.readlines()
if len(result) >= 1:
    for line in result:
        print(line.decode("utf-8"))