【问题标题】:Running bash commands in Python: os vs subprocess? [duplicate]在 Python 中运行 bash 命令:os vs subprocess? [复制]
【发布时间】:2016-12-30 14:13:36
【问题描述】:

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

os.system(bashCommand)

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

使用 Python 运行 bash 命令的正确方法是什么?为什么?对我来说,os.system 似乎是一个不错的选择,专为此类事物而设计,而另一个问题的提问者无法使用该软件包完成正确的功能只是侥幸。但是,使用subprocess 是“真正的 Pythonic 方式”吗?或者换句话说,os.systemsubprocess有什么区别?

【问题讨论】:

  • @JosphHansen 值得注意的是,C 中的 system() 函数(os.system() 无需更改即可封装)非常、非常旧:它是以前设计的例如,安全问题是一回事,因此没有任何注意将数据从代码中带出。如果担心安全地处理恶意数据,那么它在任何语言中都不是一个好的 API。

标签: python bash


【解决方案1】:

子流程让您可以更好地控制正在发生的事情。

例如,您可以像这样将输出重定向到您的程序:

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

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

如果您使用system(),您将不得不重定向输入,将其保存到文件和类似的奇怪事情。


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

子流程模块提供了更强大的工具来生成新流程并检索其结果;使用该模块优于使用此功能。有关一些有用的秘诀,请参阅子流程文档中的用子流程模块替换旧功能部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    • 2020-07-25
    • 2014-12-02
    • 2020-05-18
    • 1970-01-01
    • 2011-05-14
    相关资源
    最近更新 更多