2014-08-28 3 views
0

пример:Python подпроцесс запись данных в трубе

from subprocess import * 
proc = Popen(['cat','-'], stdin = PIPE, stdout = PIPE) 
msg = 'Through STDIN TO STDOUT' 
stdout_value = proc.communicate(msg)[0] 
print 'stdout:', stdout_value 

выход: стандартный вывод: через STDIN К STDOUT

в этом примере я сдал Сообщ строку вызываемой программы (кошки -) как stdin, Что делать, если вызываемая программа была (passwd) командой, можно ли передать ей два stdin ([значение пароля] и [значение пароля для проверки])?

ответ

0

Да и нет. Предполагая, что passwd читает со стандартного ввода, вы просто записываете две строки в стандартный ввод proc, либо устанавливая msg на что-то вроде mypass\nmypass\n, либо просто делая два звонка на proc.communicate. Однако по соображениям безопасности passwd читается непосредственно с терминала, если только вы не указали , указав его со стандартного ввода с passwd --stdin (если таковой имеется).

+0

На что система не 'passwd' считанных из'/Dev/tty'? На моей системе Ubuntu 14.04 LTS она читается с stdin. –

+0

Возможно, я неправильно истолковал необходимость в опции '--stdin', которую' passwd' занимает в ядре Scientific Linux, на который я смотрю. Кажется, что он по умолчанию считывается со стандартного ввода, основываясь на результате 'passwd chepner

+0

Я не сомневаюсь в вас, я искренне интересуюсь различиями между системами. –

1

Да, можно передать две строки ввода:

msg = 'line1\nline2\n' 
+0

Ты потрясающий приятель, спасибо :) –

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