python子进程输出到数组

python子进程输出到数组,python,subprocess,Python,Subprocess,有人能告诉我如何使用subprocess将以下命令的输出导出到列表中吗 curl --silent -u username:password http://localhost:55672/api/queues | sed 's/,/\n/g' | grep '"name"\:' | tr -d "name:" | tr -d -d \" 尝试了“subprocess.popen”、“subprocess.call”和“subprocess.popen”,但无效。下面是我尝试过的一个例子 imp

有人能告诉我如何使用subprocess将以下命令的输出导出到列表中吗

curl --silent -u username:password http://localhost:55672/api/queues | sed 's/,/\n/g' | grep '"name"\:' | tr -d "name:" | tr -d -d \"
尝试了“subprocess.popen”、“subprocess.call”和“subprocess.popen”,但无效。下面是我尝试过的一个例子

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
运行后者时向我抛出的错误

 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 $ 
请注意,当命令在shell上运行并生成以下格式的输出时,它正在工作

line1
line2
line3

有人能帮忙吗?

看起来这个命令有很多需要转义的禁止字符,也许你可以试试下面的方法

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)

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

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

尝试在
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)

可能已经晚了,但这可能很有用:

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"))

这需要
check_output()
调用中的
shell=True
。@Hamuel谢谢,但所说的代码没有解决我的问题。谢谢,但遗憾的是,建议的选项仍然没有成功:(