2017-01-17 5 views
1

Создание подпроцесса, похоже, должно закрыть некоторые fd от вызывающего, например, если вызывающий абонент открыл fd 0,1,2 (stdin, out, err) и fd = 3 (файл с именем «a.txt») и подпроцесс. POPEN наборы "close_fd = True", какПочему python subprocess.Popen нужен параметр close_fd?

p=subprocess.Popen(cmd,shell=True,close_fds=True,stdout=None... 

Означает ли это:

(1) Fd 0-3 замкнуты в подпроцесса?

(2), если Fd 0-3 замкнуто, как можно подпроцесс линии печати на экран, или сообщить о своем вводе/выводе с вызывающим абоненте:

p.communicate() 

Просто немного запутанным. Объяснения?

ответ

2

Только 3 закрыт. Из Popen docs:

Если close_fds верно, то все файловые дескрипторы кроме 0, 1 и 2 будут закрыты перед дочерним процессом выполняются. (Только POSIX).