将os.popen(命令)读入字符串

2024-05-19 18:18:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我不确定我的头衔是否正确。 我所做的是编写一个python脚本来自动化我的一些代码编写。 所以我正在分析一个.h文件。 但我想在开始之前展开所有宏。 所以我想给shell打个电话:

gcc -E myHeader.h

它应该将myHeader.h的后预处理版本输出到stdout。 现在我想把所有的输出直接读入一个字符串以便进一步处理。 我知道我可以用popen做这个,但是我从来没有用过管道对象。

我该怎么做?


Tags: 文件对象字符串代码版本脚本管道stdout
3条回答

os.popen函数只返回一个类似文件的对象。你可以这样使用它:

import os

process = os.popen('gcc -E myHeader.h')
preprocessed = process.read()
process.close()

正如其他人所说,您应该使用subprocess.Popen。它被设计成safer versionos.popen。Python文档有一个section describing how to switch over

import subprocess

p = subprocess.popen('gcc -E myHeader.h'.split(),
                     stdout=subprocess.PIPE)
preprocessed, _ = p.communicate()

字符串preprocessed现在有了您需要的预处理源代码——并且您使用了“正确”(现代)的方法来对子进程进行shell操作,而不是以前不太喜欢的方法os.popen

你应该使用subprocess.Popen()上面有很多例子

How to get output from subprocess.Popen()

相关问题 更多 >