在Python中运行bash命令:os和subprocess有什么区别?

3

我读到了这个问题,其中提问者使用如下代码在Python中运行bash时遇到了特定的问题:

os.system(bashCommand)

前两个答案简单地说:“使用subprocess”(而不是os.system),并给出了一个快速的代码示例。

什么是使用Python运行bash命令的正确方法,为什么?对我来说,os.system是一个很好的选择,专门设计用于这种类型的事情,只是另一个问题的提问者无法通过该软件包实现正确的功能。但是,“真正的Pythonic方式”是使用subprocess吗?换句话说,os.systemsubprocess之间有什么区别?


一个更好的 https://dev59.com/SnVD5IYBdhLWcg3wGXlI?rq=1 的副本。 - Nabin
值得注意的是,C语言中的system()函数(os.system()没有进行任何更改地包装)非常古老:例如,在安全问题成为一个问题之前就设计了它,因此没有注意到将数据与代码分离。如果关心安全地处理恶意数据,则在任何语言中都不是一个好的API。 - Charles Duffy
1个回答

1
Subprocess可以更好地控制正在发生的事情。
例如,您可以通过将输出重定向到管道来将其传送到程序中:
process = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE)
out, err = process.communicate()

(来自python中subprocess的getoutput()等价函数的示例)

如果你使用system(),你必须进行输入重定向,将其保存到文件中,以及其他奇怪的事情。


os.system文档中(https://docs.python.org/2/library/os.html#os.system),它说道:

子进程模块提供了更强大的功能来生成新的进程并检索其结果;使用该模块比使用此函数更可取。请参阅子进程文档中的“用子进程模块替换较旧的函数”部分,以获取一些有用的示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接