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

标签 python terminal subprocess

我的代码在终端中有两种可能的结果:无法连接 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

这至少在我打印时给了我一些东西。不幸的是,“无”告诉我没有错误,而不是实际输出:

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

我已经试过了 this this this this可能还有其他几个。我确定我在某处遗漏了一条关键知识。感谢您的指点!

最佳答案

rfcomm 显然是将其输出写入标准错误,但您只是捕获标准输出。要捕获两者,请在对 check_output 的调用中包含 stderr=subprocess.STDOUT:

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

关于python - 无法使用python存储子进程的终端输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35166090/

相关文章:

python - 来自 HTML 表中相同表单类的多个 WTForm 字段?

python - 文件相关操作 python 子进程 vs 原生 python

python - 如何将并行子进程的输出写入不同的文件

python - block - 将输入发送到 python 子进程管道

python - python `except` 可以匹配链中的所有错误吗?

c# - 如何为 PDF 模板创建签名字段?

python - 我什么时候应该继承 EnumMeta 而不是 Enum?

macos - Mac OSX Unix Bash 脚本将文件夹中的所有文件整理到一个文本文件中,最好在文件顶部有一个标签

c - 在终端中创建一个图层

java - 如何通过终端将文本文件输入到java程序中(就像在C++中那样)?