2016-03-10 3 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'). Это сделано для этого.

Смежные вопросы