python子进程输出到数组
有人能告诉我如何使用subprocess将以下命令的输出导出到列表中吗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
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谢谢,但所说的代码没有解决我的问题。谢谢,但遗憾的是,建议的选项仍然没有成功:(