Python:如何将os.system的输出重定向到Python shell?
我想用Python写一个简单的批处理脚本,使用os.system这个功能。我可以顺利地运行命令,但这些命令的输出却没有显示在Python的控制台上。有没有什么办法可以把输出显示到Python的控制台呢?
2 个回答
7
你可以使用 subprocess
这个模块。
from subprocess import Popen, PIPE
p1 = Popen(['ls'], stdout=PIPE)
print p1.communicate()[0]
这个代码会打印出当前目录的文件列表。communicate()
这个方法会返回一个包含两个部分的元组 (stdoutdata, stderrdata)
。如果你在调用 Popen
时没有加上 stdout=PIPE
或 stderr=PIPE
,那么你得到的结果会是 None
。(所以在上面的例子中,p1.communicate[1]
就是 None
。)
简单来说,
print Popen([command], stdout=PIPE).communicate()[0]
这个代码会把 command
的输出打印到控制台上。
你可以在 这里 阅读更多内容。使用 Popen
和 PIPE
还有很多其他的功能可以探索。
2
(根据要求重新发布为答案):
os.system()
在终端中运行时会正常工作——因为输出信息会发送到终端,任何你启动的进程都会继承这个输出,除非你另行设置。
如果你需要把输出重定向到 IDLE,可以参考 @root45 上面的回答(已经点赞)。这个方法对大多数程序都有效,但至少在类 Unix 系统中,进程也可以直接访问它们运行的终端(比如用来请求密码)——Windows 可能也有类似的功能。