Python:如何将os.system的输出重定向到Python shell?

3 投票
2 回答
6279 浏览
提问于 2025-04-17 06:22

我想用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=PIPEstderr=PIPE,那么你得到的结果会是 None。(所以在上面的例子中,p1.communicate[1] 就是 None。)

简单来说,

print Popen([command], stdout=PIPE).communicate()[0]

这个代码会把 command 的输出打印到控制台上。

你可以在 这里 阅读更多内容。使用 PopenPIPE 还有很多其他的功能可以探索。

2

(根据要求重新发布为答案):

os.system() 在终端中运行时会正常工作——因为输出信息会发送到终端,任何你启动的进程都会继承这个输出,除非你另行设置。

如果你需要把输出重定向到 IDLE,可以参考 @root45 上面的回答(已经点赞)。这个方法对大多数程序都有效,但至少在类 Unix 系统中,进程也可以直接访问它们运行的终端(比如用来请求密码)——Windows 可能也有类似的功能。

撰写回答