2015-02-19 3 views
1

Есть ли способ передать переменную в подпроцессе? Это не сработало.Переменная в подпроцессе

subprocess.check_output(["cat test.txt | grep %s"], shell=True) %(variable) 
+0

'' '' '' '' должен идти после строки, в которой он работает. '" cat test.txt | grep% s "% variable'. У вас есть это место справа. – khelwood

ответ

1

Вы можете использовать str.format:

"cat test.txt | grep {}".format(variable) 

Или, используя старый стиль форматирования поместить переменную непосредственно после.

"cat test.txt | grep %s"%variable 

Ваш список также излишний при использовании оболочки = True:

subprocess.check_output("cat fable.txt | grep %s" %variable, shell=True) 

Если вы используете список арг без оболочки = True, вы можете использовать Popen:

from subprocess import Popen,PIPE 
p1 = Popen(["cat","text.txt"], stdout=PIPE) 
p2 = Popen(["grep", variable], stdin=p1.stdout, stdout=PIPE) 
p1.stdout.close() 
out,err = p2.communicate() 
p1.wait() 
print(out) 
+0

Как это будет работать, если я хочу иметь несколько переменных? – user3270211

+0

несколько переменных будут точно такими же: '' cat test.txt | grep {} {} ". Format (variable, variable2)', то же самое понятие использует «% s», я предпочитаю str.format, поскольку я думаю, что это больше очевидно. –

+0

спасибо, еще один вопрос, если я хочу awk несколько двоеточий команды и поместить в несколько переменных. Есть ли простой способ сделать это вместо запуска подпроцесса для каждого varaible? – user3270211