实际上,我正在用Python编写一个程序来运行我的C和C++代码
当我试图读gcc的作品时,他们什么也没给我,一根空的绳子。
import subprocess
output = ''
cam = "g++ main.cpp -o output.exe -std=C++11"
proc = subprocess.Popen(cam, cwd='C:/test/', stdout=subprocess.PIPE)
proc.wait()
for line in proc.stdout:
output += line.rstrip()这是真正的输出 (错误是提议的,只是检查输出)
我只想知道我是如何读取GCC的输出并复制到某个变量的。
发布于 2022-01-18 17:28:12
这是因为g++在STDERR上输出错误,而不是STDOUT。如果希望读取这些错误,则应该使用stderr=subprocess.PIPE,这些错误将在proc.stderr中可用。
proc = subprocess.Popen(cam, cwd='C:/test/', stderr=subprocess.PIPE)
proc.wait()
for line in proc.stderr:
output += line.rstrip()还请注意,在这种情况下不应该使用.wait()。您希望使用.communicate(),正如文献资料所述
注意:--当使用
stdout=PIPE或stderr=PIPE时,这将导致死锁,并且子进程生成足够的输出到管道,从而阻塞等待OS管道缓冲区接受更多数据。使用管道时使用Popen.communicate()来避免这种情况。
https://stackoverflow.com/questions/70759812
复制相似问题