将os.popen(command)读取为字符串
我不太确定我的标题是否写对了。
我正在写一个Python脚本,目的是自动化一些代码编写的工作。
所以我正在解析一个.h文件。
但在开始之前,我想先展开所有的宏。
因此,我想调用命令行来执行这个操作:
gcc -E myHeader.h
这应该会把处理后的myHeader.h文件的内容输出到标准输出。
现在我想把所有的输出直接读入一个字符串,以便进行进一步处理。
我听说可以用popen来做到这一点,但我从来没有使用过管道对象。
我该怎么做呢?
5 个回答
5
你应该使用 subprocess.Popen()
,在Stack Overflow上有很多相关的例子。
17
import subprocess
p = subprocess.popen('gcc -E myHeader.h'.split(),
stdout=subprocess.PIPE)
preprocessed, _ = p.communicate()
现在,字符串 preprocessed
里有你需要的处理过的源代码了。你用的是“正确的”(现代的)方法来启动一个子进程,而不是以前不太受欢迎的 os.popen
。
37
os.popen
这个函数其实就是返回一个像文件一样的对象。你可以这样使用它:
import os
process = os.popen('gcc -E myHeader.h')
preprocessed = process.read()
process.close()
正如其他人所说的,你应该使用subprocess.Popen
。这个函数是os.popen
的一个更安全的版本。Python的文档里有一段专门讲如何切换到这个函数的内容。