2016-07-27 5 views
0

Я пытаюсь написать функцию для создания конвейера оболочки в цикле, который получает свои параметры команды из списка и передает последний stdout в новый stdin. В списке команд и команд, я хочу вызвать метод связи для объекта Popen, чтобы получить результат.python popen pipe in loop

Выход всегда пуст. Что я делаю не так?

См следующий пример:

lstCmd = ["tasklist", "grep %SESSIONNAME%", "grep %s" % (strAutName)] 
lstPopen = [subprocess.Popen(lstCmd[0].split(), stdout=subprocess.PIPE)] 
    for i in range(len(lstCmd) - 1): 
     lstPopen.append(subprocess.Popen(lstCmd[i + 1].split(), stdin=lstPopen[i].stdout, stdout=subprocess.PIPE)) 
     lstPopen[i].stdout.close() 
strProcessInfo = lstPopen[-1].communicate()[0] 

Я на среде Windows, с дополнительными функциями UNIX. После команда работает на моей командной строке Windows, и должны быть записаны в strProcessInfo:

C:\>tasklist | grep %SESSIONNAME% | grep tasklist 
tasklist.exe     18112 Console     1   5.948 K 

ответ

0

Проблема с Grep% имя_сеанс%. Когда вы выполняете то же самое в командной строке,% SESSIONNAME% фактически заменяется на «Консоль». Но когда выполняется в скрипте python, он не заменяется. Он пытается найти точный% SESSIONNAME%, которого нет. Вот почему вывод пуст.

Ниже приведен код.

Grep заменен Findstr и % имя_сеанса% заменено словом "Консоль".

import sys 
import subprocess 

lstCmd = ["tasklist", "findstr Console","findstr tasklist"] 
lstPopen = [subprocess.Popen(lstCmd[0].split(), stdout=subprocess.PIPE)] 
for i in range(len(lstCmd) - 1): 
    lstPopen.append(subprocess.Popen(lstCmd[i + 1].split(), stdin=lstPopen[i].stdout, stdout=subprocess.PIPE)) 
    lstPopen[i].stdout.close() 

strProcessInfo = lstPopen[-1].communicate()[0] 
print strProcessInfo 

Выход:

C:\Users\dinesh_pundkar\Desktop>python abc.py 
tasklist.exe     12316 Console     1  7,856 K 


C:\Users\dinesh_pundkar\Desktop> 

Пожалуйста, дайте мне знать, если это полезно.

+1

Я только что заменил ** Консоль ** на ** os.environ ["SESSIONNAME"]) **, но она отлично работала. Спасибо! –

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