【问题标题】:What's the difference between Python's subprocess.call and subprocess.runPython 的 subprocess.call 和 subprocess.run 有什么区别
【发布时间】:2017-04-03 12:21:21
【问题描述】:

我一直试图了解subprocess.callsubprocess.run 之间的区别。我知道最后一个是 Python 3.5 上的新版本,两者都基于 subprocess.Popen,但我还无法理解其中的区别。

【问题讨论】:

  • 只看文档:call: 这相当于:run(...).returncode(除了不支持input和check参数)

标签: python subprocess


【解决方案1】:

subprocess.call()的定义明确提到:

相当于: run(...).returncode (除了不支持inputcheck参数)

正如Python 3.5's subprocess document 所说:

在 Python 3.5 之前,这三个函数(即.call().check_call().check_output())构成了子进程的高级 API。您现在可以在很多情况下使用run(),但是很多现有代码都会调用这些函数。


通常的做法是,当某些功能被替换时,它们不会立即被弃用,但某些版本有一个支持窗口。这有助于防止在升级语言版本时破坏旧代码。我不知道.call()以后会不会被替换。但是根据文档,我知道它们几乎相同。

【讨论】:

    【解决方案2】:

    为了让任何想知道使用哪个的人都清楚:

    subprocess.run() 是它可以处理的所有用例的推荐方法。 suprocess documentation 声明:

    调用子流程的推荐方法是对它可以处理的所有用例使用 run() 函数。对于更高级的用例,可以直接使用底层的 Popen 接口。

    subprocess.call()Older high-level API 的一部分(Python 3.5 之前)。

    【讨论】:

      猜你喜欢
      • 2017-01-04
      • 2012-06-14
      • 2021-01-26
      • 2019-06-25
      • 2021-05-22
      • 2012-09-04
      • 2022-01-21
      • 1970-01-01
      • 2014-09-13
      相关资源
      最近更新 更多