【问题标题】:Python: How do I redirect output of os.system to python shell? [duplicate]Python:如何将 os.system 的输出重定向到 python shell? [复制]
【发布时间】:2011-11-15 17:45:55
【问题描述】:

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

【问题讨论】:

  • 你能显示一些代码吗?很难说你想做什么。
  • 你可以尝试使用subprocess模块而不是os.system,它有更好的功能(比如重定向输出)
  • 是的,很多人都建议这样做,但我似乎无法让它发挥作用。你知道一个很好的循序渐进的例子吗?我对 Python 很陌生,我发现的大多数示例都假设您知道自己在做什么。
  • “Python shell”是指 IDLE 吗?如果您在终端中运行它,我认为它应该可以工作。
  • @ThomasK 你是完全正确的。即使使用 os.system(),如果我从终端运行 python,它也会正确打印。把它变成一个答案,我会接受它。

标签: python


【解决方案1】:

您可以使用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 的输出打印到控制台。

您应该阅读更多here. PopenPIPE 可以做更多事情。

【讨论】:

    【解决方案2】:

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

    os.system() 在终端中运行时将起作用 - 这就是标准输出的用途,并且您启动的任何进程都将继承该标准输出,除非您重定向它。

    如果您需要重定向到 IDLE,请使用上面@root45 的答案(已投票)。这适用于大多数程序,但至少在 Unixy 系统上,进程也可以直接访问它们运行的​​终端(例如请求密码)——Windows 可能有类似的东西。

    【讨论】:

    • 谢谢。我在 IDLE 中测试我的程序,这就是我遇到问题的原因,但该程序无论如何都应该在 unix shell 中运行。一旦我在 shell 中运行它,我就看到了输出就好了。
    猜你喜欢
    • 2011-10-31
    • 1970-01-01
    • 2013-01-04
    • 2023-03-30
    • 2011-02-03
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多