Проверьте правильность дескриптора файла - PullRequest
8 голосов
/ 02 августа 2011

Как проверить, является ли данный дескриптор файла допустимым?Я хочу написать fd=3, если он доступен;в противном случае я хочу написать на стандартный вывод.Я знаю, что могу обернуть каждый os.write вызов оператором try-exc, но я хотел бы заранее знать, доступен ли для записи fd=3 или нет.

Ответы [ 2 ]

7 голосов
/ 02 августа 2011

Вы можете использовать os.fstat, чтобы определить, действителен ли дескриптор файла перед каждой записью, но вам нужно будет обернуть его при попытке / исключении, так как некорректные файловые дескрипторы вызовут OSError , Возможно, вам лучше просто создать собственную функцию записи с помощью try / исключением.

def write(data, fd=3):
    try:
        os.write(fd, data)
    except OSError:
        sys.stdout.write(data)
2 голосов
/ 02 августа 2011

Как насчет попытки os.write до fd=3 один раз в начале (внутри блока try - except) и изменения всего последующего поведения в зависимости от успеха этого?

Этотак что вам не нужно будет оборачивать каждый вызов в try - except.Конечно, это сломается, если fd=3 перестанет быть действительным в середине вашей проблемы (например, если это труба, которая закрывается с другого конца).

...