我有一个小的 python 脚本,它从文件系统中找到文件 ID。它可以使用文件 ID 搜索文件。这在本地驱动器中完美运行。但是我无法搜索网络驱动器中的文件。
def getFileId(filepath):
print(popen('fsutil file queryFileId ' + filepath).read())
def getFilePath(fileid, directory):
print(popen('fsutil file queryFileNameById ' + directory + " " + fileid).read())
'Z' 是我的网络驱动器。当我调用 getFileId(Z: est.txt) 时,它会正确打印文件 ID,例如:0x000123。但是当我调用 getFilePath(0x000123, Z:\) 时,它会抛出错误“错误:文件名、目录名或卷标语法不正确。”
这是由于任何限制还是我以错误的格式传递参数?
我是否以错误的格式传递参数?
这个。
首先,您显示的代码根本不起作用,
getFileId
不return任何东西,它只是打印东西。
其次,您使用的命令具有格式化输出:
> fsutil file queryfileid foo.bar
File ID is 0x000000...0012345
但是
queryfilenamebyid
只想要实际的id,所以你需要提取它。请注意,queryfilenamebyid
具有完全相同的问题,例如
> fsutil file queryfilenamebyid c:\ 0x12345
A random link name to this file is \\?\C:\Users\bob\foo.bar
第三,你应该避免
os.popen
因为它更难控制和组合命令,更喜欢 suprocess.run
你可以传递一个位列表,这在处理可以包含字符串的字符串时更可靠,或者“不安全”输入,它有更多的控制旋钮。尽管默认设置有点糟糕,因为您需要询问它 capture_output=True
或者它只是调用命令并且您获得状态而不是流输出。