Python的subprocess.call和subprocess.run之间有什么区别

时间:2016-11-19 20:30:19

标签: python subprocess

我一直试图了解一段时间"responses": { "200": { "description": "successful operation", "schema": { "type": "object", "properties": { "data": { "$ref": "#/definitions/Client" } } } } } Client之间的区别。我知道最后一个是Python 3.5上的新内容,两者都基于subprocess.call,但我还是无法理解其中的差异。

2 个答案:

答案 0 :(得分:17)

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

  

相当于:   run(...).returncode   (不支持输入检查参数)

正如Python 3.5's subprocess document所说:

  

在Python 3.5之前,这三个函数(即.call().check_call().check_output())包含了子级处理的高级API。现在,您可以在许多情况下使用run(),但许多现有代码会调用这些函数。

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

答案 1 :(得分:3)

对于任何想知道使用哪个的人来说都很清楚:

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

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

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