2017-07-19 59 views
0

有人可以告诉我如何使用子进程得到下面的命令的输出到列表吗?python子过程输出到一个数组

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][email protected]:~/rbmq_test $ 

是我引发的错误,请注意,当它在shell中运行,并在下面的格式生成输出命令正在

line1 
line2 
line3 

请问有人可以帮忙吗?

回答

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) 
+0

这需要在'check_output()'调用中'shell = True'。 – JohanL

+0

@Hamuel谢谢,但上述代码没有解决我的问题。 – bindo

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) 
+0

谢谢,但不幸的是建议的选项仍然没有运气。 :( – bindo