使用Python无法存储子进程的终端输出

3

在终端中,我的代码有两种可能的结果:无法连接RFCOMM套接字:权限被拒绝无法连接RFCOMM套接字:主机已关闭。我需要将其中任意一种结果存储为字符串变量,但是我尝试过的所有方法都失败了。以下是我认为可以做到这一点的代码:

from subprocess import check_output

out = check_output(["sudo", "rfcomm", "connect", "0", "AA:BB:CC:DD:EE:FF", "10"])
print "output: %s" % out

相反,我什么都没有得到:

user:~/home $./foo.py
Can't connect RFCOMM socket: Permission denied
output:

另一种尝试:
proc = subprocess.Popen(["sudo rfcom connect 0 AA:BB:CC:DD:EE:FF 10"], stdout=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()
print "output: %s" % out, err

这至少在我打印时提供了一些信息。不幸的是,它告诉我“None”,并没有实际的输出:

user:~/home $./foo.py
Can't connect RFCOMM socket: Permission denied
output:  None

我已经尝试过这个这个这个这个,可能还有其他几个。我肯定是缺少某些关键知识。感谢任何指针!


3
你是否尝试添加:stderr=subprocess.PIPE - Gerrat
1个回答

3

rfcomm 显然将其输出写入标准错误流,而你只捕获了标准输出流。为了同时捕获二者,调用 check_output 时需包含 stderr=subprocess.STDOUT

subprocess.check_output(["sudo", "rfcomm", "connect", "0", "AA:BB:CC:DD:EE:FF", "10"],
                        stderr=subprocess.STDOUT)

非常感谢。我之前以为我已经正确尝试过了,但看来并没有。 - quelleck
谢谢你的回答,帮了我大忙。 - Charitra Agarwal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接