2016-03-10 155 views
0

我想使用python Popen來實現看起來像這樣使用命令行。python子流程管道stdin

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

目標是管道中的「你好」文成docker exec命令,並將它寫入泊塢窗容器。

我試過這個,但似乎無法得到它的工作。

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() 
+0

它是如何失效的?它會產生一個空文件嗎?根本沒有文件?錯誤消息? –

+0

根本沒有文件。雖然沒有錯誤。 – user1513388

+0

什麼是「碼頭」?你有鏈接到它的文檔? –

回答

1

你需要給stdin新行也:

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

也就是說即使sys.stdout同樣的事情。您不需要給print添加新行,因爲它可以爲您執行此操作,但是對手動執行的任何文件寫入操作,都需要包含它。不過,您應該使用p.communicate('Hello')。這是爲了這個。