Python:从管道接收文件时,如何获取文件的URL?

Python:从管道接收文件时,如何获取文件的URL?,python,file,python-2.7,url,pipe,Python,File,Python 2.7,Url,Pipe,我用Python创建了一个可执行文件,其输入是文件的URL,输出是文件,例如 file:///C:/example/folder/test.txt --> url2file --> the file 实际上,URL存储在一个文件(URL.txt)中,我使用管道从DOS命令行运行它: type url.txt | url2file 这很有效 我想在Python中创建一个可执行文件,其输入是一个文件,其输出是该文件的URL,例如 a file --> file2url --&g

我用Python创建了一个可执行文件,其输入是文件的URL,输出是文件,例如

file:///C:/example/folder/test.txt --> url2file --> the file
实际上,URL存储在一个文件(URL.txt)中,我使用管道从DOS命令行运行它:

type url.txt | url2file
这很有效

我想在Python中创建一个可执行文件,其输入是一个文件,其输出是该文件的URL,例如

a file --> file2url --> URL
同样,我使用DOS并通过管道连接可执行文件:

type url.txt | url2file | file2url

问题:
file2url
正在接收文件。如何获取文件的URL(或路径)

“file2url”通过标准输入(如键盘)接收数据。
数据由内核传输,不一定要有任何文件系统表示。因此,如果没有文件,就没有URL或路径可供您获取。

'file2url'通过标准输入(如键盘)接收数据。
数据由内核传输,不一定要有任何文件系统表示。因此,如果没有文件,就没有URL或路径可供您获取。

一般来说,您可能无法获取

如果url没有存储在文件中,我似乎很难获得url。想象有人给你读了一条短信。如果没有进一步的信息,你就无法知道它来自哪本书

然而,在某些用例中,您可以这样做

通过管道将url与文件连接在一起。 如果您需要url并且可以这样做,请尝试将url与文件保持在一起。首先让url2file管道连接您的url,然后再连接文件

重组你的管道 如果重新构造管道,可能不需要找到文件的url

为文件编制索引 如果只有一个特定的文件可能被管道传输到file2url,那么您可以预先计算所有文件的哈希值,并将其与url一起存储在您的程序中。在python中,可以使用
dict
来执行此操作,其中键是文件(作为字符串),值是url。您可以使用
pickle
将dict对象写入文件,并在程序开始时加载它

然后您可以简单地从这个目录中查找url

您可能希望研究Explorer中的数据库或搜索函数如何处理索引或替代解决方案

搜索文件 您可以使用文件的一个重要行,并在linux上使用类似于
grep
head
的内容来搜索计算机上的所有文件中的这一行。请注意,
grep
head
是程序,而不是python函数。对于DOS,您可能需要在谷歌上搜索相应的程序

仅供参考:
grep
在文件中搜索一行文本。
head
输出文件的前几行。我建议只比较文件的前几行,以避免搜索大型文件

搜索计算机上的所有文件可能需要很长时间

您只能搜索与管道输入大小相同的文件

使用url.txt
如果file2url知道文件
url.txt
的位置,则可以在url.txt中查找所有文件,直到找到与通过管道传输到程序中的文件相同的文件。您可以将其与哈希/索引解决方案结合使用。

一般来说,您可能无法

如果url没有存储在文件中,我似乎很难获得url。想象有人给你读了一条短信。如果没有进一步的信息,你就无法知道它来自哪本书

然而,在某些用例中,您可以这样做

通过管道将url与文件连接在一起。 如果您需要url并且可以这样做,请尝试将url与文件保持在一起。首先让url2file管道连接您的url,然后再连接文件

重组你的管道 如果重新构造管道,可能不需要找到文件的url

为文件编制索引 如果只有一个特定的文件可能被管道传输到file2url,那么您可以预先计算所有文件的哈希值,并将其与url一起存储在您的程序中。在python中,可以使用
dict
来执行此操作,其中键是文件(作为字符串),值是url。您可以使用
pickle
将dict对象写入文件,并在程序开始时加载它

然后您可以简单地从这个目录中查找url

您可能希望研究Explorer中的数据库或搜索函数如何处理索引或替代解决方案

搜索文件 您可以使用文件的一个重要行,并在linux上使用类似于
grep
head
的内容来搜索计算机上的所有文件中的这一行。请注意,
grep
head
是程序,而不是python函数。对于DOS,您可能需要在谷歌上搜索相应的程序

仅供参考:
grep
在文件中搜索一行文本。
head
输出文件的前几行。我建议只比较文件的前几行,以避免搜索大型文件

搜索计算机上的所有文件可能需要很长时间

您只能搜索与管道输入大小相同的文件

使用url.txt
如果file2url知道文件
url.txt
的位置,则可以在url.txt中查找所有文件,直到找到与通过管道传输到程序中的文件相同的文件。您可以将其与散列/索引解决方案结合使用。

让我们尝试通过显而易见的方式来实现:

$ cat test.py | python test.py 
import sys
print ''.join(sys.stdin.readlines())
print sys.stdin.name

<stdin>
$cat test.py | python test.py
导入系统
打印“”。加入(sys.stdin.readlines())
打印sys.stdin.name
因此,文件名是“”,因为python没有仅文件名的输入


另一种方式是依赖于系统。查找一个命令行,例如,它曾被使用过,但没有一个担保行可以使用。

让我们试着用一种明显的方式来实现它:

$ cat test.py | python test.py 
import sys
print ''.join(sys.stdin.readlines())
print sys.stdin.name

<stdin>
$cat test.py | python test.py
导入系统
打印“”。加入(sys.stdin.readlines())