Я пытаюсь написать функцию для создания конвейера оболочки в цикле, который получает свои параметры команды из списка и передает последний 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
Я только что заменил ** Консоль ** на ** os.environ ["SESSIONNAME"]) **, но она отлично работала. Спасибо! –