有人可以告诉我如何使用子进程获取以下命令的输出到列表中吗?
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 $
请有人帮忙吗?
答案 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"))