Есть ли способ узнать имя файла, на который перенаправлен стандартный вывод в Python? - PullRequest
6 голосов
/ 10 мая 2011

Я знаю, как определить, перенаправляется ли мой скрипт Python stdout (>) с помощью sys.stdout.isatty(), но есть ли способ узнать, на что он перенаправляется?

Например:

python my.py > somefile.txt

Есть ли способ узнать имя somefile.txt как в Windows, так и в Linux?

Ответы [ 2 ]

10 голосов
/ 10 мая 2011

Я сомневаюсь, что вы можете сделать это независимо от системы. В Linux работает следующее:

import os
my_output_file = os.readlink('/proc/%d/fd/1' % os.getpid())
1 голос
/ 10 мая 2011

Если вам нужен независимый от платформы способ получения имени файла, передайте его в качестве аргумента и используйте argparse (или optparse) для чтения ваших аргументов, вообще не полагайтесь на перенаправление оболочки.

Используйте python my.py --output somefile.txt с кодом, таким как:

parser = argparse.ArgumentParser()
parser.add_argument('--output', # nargs='?', default=sys.stdout,
                    type=argparse.FileType('w'), 
                    help="write the output to FILE", 
                    metavar="FILE")

args = parser.parse_args()
filename = args.output.name

Если знание имени является необязательным и используется для какой-то странной оптимизации, тогда используйте решение Игоря Назаренко и убедитесь, что sys.platform равно 'linux2', в противном случаепредположим, что у вас нет имени, и относитесь к нему как к обычной трубе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...