【发布时间】:2019-07-22 06:11:41
【问题描述】:
PYTHON 版本 - 3.5.2 操作系统 - Ubuntu 16.04 LTS
我目前正在使用 stdout 和 print 语句来写入终端。 我想捕获 ONLY sys.stdout.write 命令的输出,而不是打印命令 因此,例如,如果我的代码是 -
import sys
sys.stdout.write("Hello")
print("PRINT")
我只想捕获“Hello”而不是“PRINT”。
我目前正在使用这个:
x = subprocess.run(['python3 test.py'] , shell = True , stdout = subprocess.PIPE).stdout.decode('utf-8')
这给了我这个输出:
['HelloPRINT', '']
【问题讨论】:
-
print()使用sys.stdout.write()来显示文本。但是 suproccess 只看到系统发送的文本,它不知道您使用什么向系统发送文本。 -
print默认写入sys.stdout。但是,您可以在print函数的file参数中覆盖此行为。 -
您只能将
print()重定向到文件或stderr但您必须在代码print("Print", file=sys.stderr)中执行此操作 -
那么当我将它重定向到
sys.stderr时,文本会发生什么? -
当您在控制台/终端中运行它时,您将看到所有文本 - stdout` 和
stderr- 但子进程将仅获得stdout,因为您仅设置了stdout = subprocess.PIPE
标签: python python-3.x stdout