在Python中运行bash命令:os vs subprocess?

时间:2016-08-23 16:30:26

标签: python bash

我读了this question,其中提问者遇到了使用以下代码在Python中运行bash的特定问题:

os.system(bashCommand)

前两个答案只是说:"使用subprocess" (而不是os.system),并提供一个快速代码示例。

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

1 个答案:

答案 0 :(得分:2)

Subprocess让您可以更好地控制正在进行的操作。

例如,您可以将输出重定向到管道程序,如下所示:

process = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE)
out, err = process.communicate()

(来自python getoutput() equivalent in subprocess的例子)

如果您使用system(),则必须对输入进行重定向,将其保存到文件和类似的奇怪事情。

os.systemhttps://docs.python.org/2/library/os.html#os.system)的文档中,据说:

  

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