使用 os.system 还是 subprocess 将命令传递给 shell
我想在一个命令行中执行一个命令,同时把输出结果传递给另一个命令进行过滤。
相关的代码看起来是这样的:
import os
n=raw_input("enter cmd")
os.system(n + ' | grep x')
结果是
Syntax error: Redirection unexpected.
我在使用ubuntu系统,网上好像有一些相关的资料提到过这个,但我找不到直接能用的。看起来使用子进程可能会有帮助,但大多数例子我现在还看不太懂。
3 个回答
0
你遇到的错误是来自命令行,而不是Python。很可能是因为你没有输入完整的命令,所以系统只执行了" | grep x"这个部分,这样就会出现类似的错误。
2
请使用subprocess模块来代替已经不推荐使用的os.system。
subprocess模块可以让你实现数据传输和捕获输出,这正是你想要的功能。
process = subprocess.call(command_string.split(), ..., stdout=subprocess.PIPE, ...)
... handle your output from process.communicate()
1
在Ubuntu系统中,默认的命令行工具是dash
,如果你在一行的开头加上|
,就会出现错误。所以我猜测你在n
里面没有放任何东西。
现在os.system()
这个方法已经不推荐使用了。subprocess
模块功能更强大,更受欢迎。你需要花一些时间去阅读它的文档,但这样做是值得的。它有一些很方便的“便捷函数”,可以减少你需要做的工作。