Python subprocess.Popen不接受文本参数。

15
根据Python 3文档中subprocess.Popen的说明,该类构造函数接受一个可选参数text(用于控制文件对象stdin、stdout和stderr是否以文本模式打开)。
然而,当我尝试在构造Popen对象时设置text=true时,我会收到错误信息。
Failed: TypeError: __init__() got an unexpected keyword argument 'text'

当我查看源代码时(我正在使用Python 3.6.4),构造函数不带任何参数text。这是怎么回事?为什么文档说构造函数需要一个可选的参数text,而在我的subprocess.py版本中却没有?
2个回答

32

我有一种感觉,text参数是在3.7版本中添加的,而不是3.6。

文档的相关部分:

从3.7版本开始更改:添加了text参数,作为universal_newlines的更易理解的别名。添加了capture_output参数。


1
啊,那可能就是了。虽然有点奇怪,为什么这个注释被添加到了 subprocess.run 而不是 subprocess.Popen - HelloGoodbye
啊!你忘记采纳我的答案了 :) @HelloGoodbye - Cecile
11
确实,使用universal_newlines=True而不是text=True可以解决问题。 - HelloGoodbye

1

正如 @Cecile 所说,一些参数,例如 textcapture_output 已在 3.7 版本中添加。

因此,为了在其中运行某些命令,您可以尝试以下代码:

import subprocess
subprocess.run('git --version', shell=True, check=True, universal_newlines=False)

如果您想在3.6版本中捕获输出(capture_output),请尝试以下操作:
from subprocess import PIPE
import subprocess

subprocess.run('git --version', shell=True, check=True, universal_newlines=False, stdout=PIPE, stderr=PIPE)

P.S. 更多信息,请查看此链接

(注:此处为原文,下同)

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