Lyn*_*ite 15 python string popen
我不确定我的头衔是否合适.我正在做的是编写一个python脚本来自动化我的一些代码编写.所以我正在解析.h文件.但我想在开始之前扩展所有宏.所以我想调用shell来:
gcc -E myHeader.h
Run Code Online (Sandbox Code Playgroud)
哪个应该将myHeader.h的post preprocessed版本放到stdout中.现在我想直接将所有输出读入字符串以进行进一步处理.我已经读过我可以用popen做到这一点,但我从未使用过管道对象.
我该怎么做呢?
Bri*_*nna 26
该os.popen函数只返回一个类文件对象.您可以像这样使用它:
import os
process = os.popen('gcc -E myHeader.h')
preprocessed = process.read()
process.close()
Run Code Online (Sandbox Code Playgroud)
正如其他人所说,你应该使用subprocess.Popen.它的设计是一个更安全的版本的os.popen.Python文档有一节描述如何切换.
Ale*_*lli 16
import subprocess
p = subprocess.popen('gcc -E myHeader.h'.split(),
stdout=subprocess.PIPE)
preprocessed, _ = p.communicate()
Run Code Online (Sandbox Code Playgroud)
字符串preprocessed现在具有您需要的预处理源 - 并且您已经使用"正确"(现代)方式来封装到子进程,而不是旧的不那么喜欢的方式os.popen.