Вы обнаружите, что вызов Popen
на самом деле не выполняет программу и возвращает результат, а скорее создает объект, который ссылается на созданный процесс. В вашем случае вы не вызвали Popen.communicate
, который «общается» с процессом и фиксирует его вывод завершенным. Принимая во внимание, что check_output
делает все это для вас. Вы обнаружите, что метод communicate
займет примерно столько же времени, но на самом деле вернет желаемый результат.
Для фактической демонстрации с POpen
заменить
matched_reads = subprocess.Popen(['grep', match, file], stdout=subprocess.PIPE, env=myenv)
с
process = subprocess.Popen(['grep', match, file], stdout=subprocess.PIPE, env=myenv)
matched_reads, stderr = process.communicate()
Который должен повторять то же поведение, что и check_output
, чтобы matched_reads
содержал вывод, произведенный grep
.