【问题标题】:os.system or subprocess to pass command to shellos.system 或子进程将命令传递给 shell
【发布时间】:2011-11-05 15:35:13
【问题描述】:

我正在尝试在 shell 中执行命令并同时通过管道输出进行过滤。

相关代码如下:

import os
n=raw_input("enter cmd")
os.system(n + ' | grep x')

结果是

Syntax error: Redirection unexpected.

它在 ubuntu 上,似乎网上的一些参考资料提到了这一点,但没有一个我可以直接关联。似乎 subprocess 可能会有所帮助,但大多数示例都超出了我目前的理解范围。

【问题讨论】:

    标签: python subprocess redirect os.system


    【解决方案1】:

    Use subprocess module instead of os.system, which is deprecated.

    subprocess 允许根据需要使用管道和捕获标准输出。

    process = subprocess.call(command_string.split(), ..., stdout=subprocess.PIPE, ...) 
    
    ... handle your output from process.communicate()
    

    【讨论】:

    • 谢谢,相信就在这个命令里,我只是对它有点陌生。我会继续寻找例子,它可能会有所帮助......
    【解决方案2】:

    在 Ubuntu 中,默认的 shell 是 dash,如果你以 | 开始一行,这就是它给你的错误,所以我猜你没有在 n 中放任何东西。

    os.system() 现在已弃用。 subprocess 模块功能更强大,更受欢迎。您将不得不花费一些时间来阅读有关它的文档,但它得到了回报。它有一些方便的“便利功能”来减少所需的工作。

    【讨论】:

    • TZ,这很有帮助。它帮助我使用一些打印语句和推理来解决一些问题。我能够证明输出被打印到屏幕上,th(就像我说的非常新手)en “| grep x”。我正在同时学习非科学编程和python(就像我说的非常新手一样)。我
    • 只是出于好奇,为什么不推荐使用os.system()?似乎它提供了一个非常快速和简单的界面,当您只想将命令传递给系统而无需投入任何时间学习如何使用更复杂的 subprocess 模块时......
    【解决方案3】:

    你从 shell 得到一个错误,而不是 python。你很可能没有输入命令,所以系统调用只有“|grep x”,会返回这样的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 2012-04-24
      • 1970-01-01
      相关资源
      最近更新 更多