Python子进程管道到stdin

时间:2016-03-10 00:08:12

标签: python subprocess stdin popen

我尝试使用python Popen使用命令行实现这样的效果。

 echo "hello" | docker exec -i $3 sh -c 'cat >/text.txt'

目标是管道"你好"将文本写入docker exec命令并将其写入docker容器。

我已经尝试了这一点,但似乎无法让它发挥作用。

import subprocess
from subprocess import Popen, PIPE, STDOUT

p = Popen(('docker', 'exec', '-i', 'nginx-ssl', 'sh', '-c', 'cat >/text.txt'), stdin=subprocess.PIPE)
p.stdin.write('Hello')
p.stdin.close()

1 个答案:

答案 0 :(得分:1)

您还需要给stdin新行:

p.stdin.write('Hello\n')

即使sys.stdout也是如此。您不需要为print添加新行,因为它会为您执行此操作,但是您手动执行的任何文件写入都需要包含它。不过,您应该使用p.communicate('Hello')。这是为此而做的。