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

3

我想使用python编写一个简单的批处理脚本,使用os.system。我能够正常运行命令,但是这些命令的输出不会打印到python shell中。有没有办法将输出重定向到python shell中?


1
你能展示一些代码吗?很难理解你想做什么。 - Fred Foo
3
你可以尝试使用subprocess模块代替os.system,它具有更好的功能(如重定向输出)。 - NullUserException
是的,许多人建议这样做,但我似乎无法使它工作。你知道有没有一个好的逐步示例吗?我非常新手Python,大多数示例都假定你知道自己在做什么。 - mtmurdock
1
你的意思是用Python shell指IDLE吗?如果在终端中运行,我认为它应该可以工作。 - Thomas K
@ThomasK 你说得对。即使使用 os.system(),如果我在终端中运行 Python 它也会正常打印。把这个放进答案里,我会接受它的。 - mtmurdock
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 的输出打印到控制台。

您应该在这里阅读更多信息。您可以使用 PopenPIPE 进行更多操作。


2

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

os.system()在终端运行时可以正常工作-这是标准输出的位置,启动的任何进程都将继承该标准输出,除非您重定向它。

如果你需要重定向到IDLE,请使用@root45上面提供的答案(已经获得赞同)。这对大多数程序有效,但至少在类Unix系统上,进程也可以直接访问它们运行的终端(例如请求密码)-Windows可能有类似的功能。


谢谢。我之前在IDLE中测试我的程序,所以遇到了一些问题,但是这个程序本来就是要在Unix shell中运行的。当我在shell中运行它时,我立刻看到了正确的输出。 - mtmurdock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接