当我使用python3.7.4(通过自制程序安装)和docker 18.09.2(内部版本6247962)在OSX 10.14.6(18G84)上运行proc = subprocess.Popen('docker', stdout=subprocess.PIPE)
时,标准输出将在控制台中打印,而不是被重定向
这只发生在'docker'
-另一个子进程,例如'ls'
,通过proc.stdout.readlines()
返回一些内容,而不是在控制台上打印其输出。在
另外,我通过在EC2实例(Amazon AMI 2,Docker 18.06.1-ce,Python 2.7.16&3.7.3)上运行相同的命令来确保这是OSX特有的问题,Docker子进程的proc.stdout.readlines()
返回了expeed结果(控制台中没有输出,proc.stdout.readlines()
包含Docker输出)。在
我在google上找到了一个SO post Problems capturing Python subprocess output on Mac OS X,但它似乎是python问题(python中的打字错误),而不是OSX问题。在
为什么是进程stdout.readlines()没有为“docker”返回任何内容?在
更多详情:
{a2的源代码不是open},而是一个命令
所以我决定自己修复它,调试它让我想到this code:
...
import subprocess
...
def get_docker_commands():
proc = subprocess.Popen('docker', stdout=subprocess.PIPE)
lines = [line.decode('utf-8') for line in proc.stdout.readlines()]
docker作为子进程运行,然后由proc.stdout.readlines()
读取其stdout,这就是问题的根源。在
所以我在python交互控制台中尝试了类似的命令,如下所示:
(在Mac OS上)
^{pr2}$(在EC2实例上)
Python 3.7.3 (default, Jun 24 2019, 19:20:54)
[GCC 7.3.1 20180303 (Red Hat 7.3.1-5)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> proc = subprocess.Popen('docker', stdout=subprocess.PIPE)
>>> proc.stdout.readlines()
(docker output as python list)
我没有包括结果,但Python的结果是一样的。(Mac和EC2都是Python 2.7.16)
目前没有回答
相关问题 更多 >
编程相关推荐