将os.popen(command)读取为字符串

19 投票
5 回答
122581 浏览
提问于 2025-04-15 19:45

我不太确定我的标题是否写对了。
我正在写一个Python脚本,目的是自动化一些代码编写的工作。
所以我正在解析一个.h文件。
但在开始之前,我想先展开所有的宏。
因此,我想调用命令行来执行这个操作:

gcc -E myHeader.h

这应该会把处理后的myHeader.h文件的内容输出到标准输出。
现在我想把所有的输出直接读入一个字符串,以便进行进一步处理。
我听说可以用popen来做到这一点,但我从来没有使用过管道对象。

我该怎么做呢?

5 个回答

5

你应该使用 subprocess.Popen(),在Stack Overflow上有很多相关的例子。

如何从 subprocess.Popen() 获取输出

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的文档里有一段专门讲如何切换到这个函数的内容。

撰写回答