#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 Хорошо, спасибо за помощь и информацию!