2013-10-07 4 views
1

У меня есть текст в переменную с именем MYTEXT, и я хочу, чтобы запустить команду:система вызова с аргументами и трубкой

myText = "This is my text"  
call("echo" + myText + " | mail username -s subj") 

это означает, что я хочу повторить текст в MYTEXT и проход по почте команда через трубу. Каков правильный способ сделать это?

+1

Работает ли этот код? Если нет, что он делает? Что вы изучили? –

+2

Вы уже делали 'из подпроцесса import call'? Если да, то все, что вам не хватает, - это окружение 'myText' кавычками, например' call ("echo '" + myText + "' | mail username -s subj)' –

ответ

3

Вы должны взглянуть на команду os, такую ​​как popen, которая позволяет вам создать канал для взаимодействия процессов между собой. Проверьте это page

from subprocess import Popen, PIPE 
p1 = Popen(['echo', myText], stdout=PIPE) 
p2 = Popen('mail', stdin=p1.stdout) 

Это должно работать.

+0

и как это «имя пользователя почты -s subj», должен быть написан вместо «mail» в 'p2 = Popen ('mail', stdin = p1.stdout)'? – user2234234

+0

Это хорошо, но нужно ждать на p1 и p2, чтобы процессы завершились. – tdelaney

+2

@ user2234234 - это будет 'p2 = Popen (['mail', 'username', '-s', 'subj'], stdin = p1.stdout)'. В этом примере выполняется прямая переадресация почты, пропуская промежуточную оболочку, поэтому необходимо разбить каждый аргумент на список. – tdelaney

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