2015-01-30 2 views
4

следующий скрипт:os.close() убивает сценарий питона без исключения

import os 

def call_close(fd): 
    try: 
     print fd 
     os.close(fd) 
    except Exception as e: 
     print 'Exception:', e 

for fd in range(10): 
    call_close(fd) 

печатает

0 
1 

Ничего больше. Никаких исключений. Кто-нибудь догадывается, что происходит?

+0

Возможно, связанное с этой статьей: http://stackoverflow.com/questions/24173998/difference-between-os-close0-sys-stdin-close –

ответ

3

os.close:

Закрыть дескриптор файла fd.

Закрытие fd = 1 закрывает STDOUT, поэтому вы больше не увидите выход.

+0

Отлично. Моя реальная проблема заключалась в том, что стоп-кадр переставал работать, но причина была такой же. –

5

Из documentation (курсив мой):

Файловые дескрипторы представляют собой небольшие целые числа, соответствующие файлу, который был открыт текущим процессом. Например, стандартный ввод обычно дескриптор файла 0, стандартный вывод 1, и стандартная ошибка 2.

Сценарий не прекращения; вы закрываете standard output, поэтому ничего, напечатанное после этой строки, невозможно отобразить.

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