我有一个python程序,它从stdin读取输入(必选),并处理来自stdin的行:
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
有办法做到这一点吗?
不,这不可能。作为管道的接收端,您不知道您的数据流来自何处。cat
的使用进一步混淆了它,但即使你写./pythonFile.py < document.txt
,你也不会有任何线索。
许多unix工具接受文件名作为参数,-
作为'stdin'的特殊代码。您可以以同样的方式设计脚本,因此可以像
cat document.txt | pythonFile.py -
(你的脚本不知道输入来源)./pythonFile.py document.txt
(你的脚本不知道文件)