Python popen - 如何使用网络驱动器中的文件 ID 搜索文件?

问题描述 投票:0回答:1

我有一个小的 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:\) 时,它会抛出错误“错误:文件名、目录名或卷标语法不正确。”

这是由于任何限制还是我以错误的格式传递参数?

python python-3.x popen network-drive
1个回答
0
投票

我是否以错误的格式传递参数?

这个。

首先,您显示的代码根本不起作用,

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
或者它只是调用命令并且您获得状态而不是流输出。

© www.soinside.com 2019 - 2024. All rights reserved.