os.system或subprocess将命令传递给shell

时间:2011-08-28 21:31:48

标签: python subprocess redirect os.system

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

相关代码如下:

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

结果是

Syntax error: Redirection unexpected.

它在ubuntu上,似乎有些在线参考提到了这一点,但没有一个我能直接联想到。看起来像subprocess可能有所帮助,但大多数例子都超出了我目前的理解。

3 个答案:

答案 0 :(得分:2)

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()

答案 1 :(得分:1)

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

os.system()现已弃用。 subprocess模块功能更强大,更受欢迎。你需要花一些时间阅读它上面的文档,但它会得到回报。它有一些方便的“便利功能”,以减少所需的工作。

答案 2 :(得分:0)

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