使用 os.system 还是 subprocess 将命令传递给 shell

1 投票
3 回答
1420 浏览
提问于 2025-04-17 00:29

我想在一个命令行中执行一个命令,同时把输出结果传递给另一个命令进行过滤。

相关的代码看起来是这样的:

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模块功能更强大,更受欢迎。你需要花一些时间去阅读它的文档,但这样做是值得的。它有一些很方便的“便捷函数”,可以减少你需要做的工作。

撰写回答