Python: получение имени файла, переданного в стандартный файл

#python #filenames #stdin

#python #имена файлов #стандартный файл

Вопрос:

У меня есть программа на Python, которая считывает входные данные из стандартного файла (обязательно) и обрабатывает строки из стандартного файла:

 for lines in stdin:
     #do stuff to lines
     filename = #need file name
     #example print
     print(filename)
 

Однако в этом цикле for мне также нужно получить имя файла, который был передан в эту программу python, например:

 cat document.txt | pythonFile.py #should print document.txt with the example print
 

Есть ли способ сделать это?

Комментарии:

1. Не могли бы вы предоставить дополнительную информацию о том, почему вы хотите передать имя файла скрипту python, когда вы можете передать файл документа в качестве аргумента скрипту?

2. @RushikeshGaidhani Это часть школьного задания. В инструкциях говорится, что мы должны получать входные данные из стандартного файла.

Ответ №1:

Нет, это невозможно. Как принимающий конец канала, вы не знаете, откуда поступает ваш поток данных. Использование cat дальнейших запутывает его, но даже если бы вы написали ./pythonFile.py < document.txt , вы бы понятия не имели.

Многие инструменты unix принимают имена файлов в качестве аргумента и - в качестве специального кода для ‘stdin’. Вы могли бы создать свой скрипт таким же образом, чтобы его можно было вызвать следующим образом

  • cat document.txt | pythonFile.py - (ваш скрипт не знает источник ввода)
  • ./pythonFile.py document.txt (ваш скрипт знает файл)

Комментарии:

1. С cmd < file помощью него можно определить файл /proc/self/fd/0 , но, по-видимому, это решение только для Unix.

2. @ypnos Хорошо, спасибо за помощь и информацию!