我想使用os.system使用python创建一个简单的批处理脚本。我能够正常运行命令,但这些命令的输出不打印到python shell。有没有办法将输出重定向到python shell?
答案 0 :(得分:7)
您可以使用subprocess
。
from subprocess import Popen, PIPE
p1 = Popen(['ls'], stdout=PIPE)
print p1.communicate()[0]
这将打印当前目录的目录列表。 communicate()
方法返回元组(stdoutdata, stderrdata)
。如果您在stdout=PIPE
来电中未加入stderr=PIPE
或Popen
,那么您只需返回None
。 (所以在上面,p1.communicate[1]
是None
。)
在一行中,
print Popen([command], stdout=PIPE).communicate()[0]
将command
的输出打印到控制台。
您应该阅读更多here.您可以使用Popen
和PIPE
完成更多工作。
答案 1 :(得分:2)
(根据要求重新作为答案):
os.system()
在终端中运行时会起作用 - 这就是stdout的去向,除非你重定向它,否则你启动的任何进程都将继承该stdout。
如果您需要重定向到IDLE,请使用@ root45上面的答案(upvoted)。这适用于大多数程序,但至少在Unixy系统上,进程也可以直接访问它们运行的终端(例如,请求密码) - Windows可能有类似的东西。