Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python检测USB驱动器,然后分配驱动器号?_Python_Windows - Fatal编程技术网

Python检测USB驱动器,然后分配驱动器号?

Python检测USB驱动器,然后分配驱动器号?,python,windows,Python,Windows,问题就在这里。我们有100个外部500gb USB驱动器。每个驱动器将在一年中移动到一个新的位置。自动检测USB驱动器已插入Windows系统,然后分配Z:\驱动器盘符的最佳方法是什么?这些USB驱动器将被插入许多不同的计算机中,这样的脚本 import subprocess diskpart_data = "z-drive.txt" open (diskpart_data, "w").write (""" select volume F: assign letter=Z """) subp

问题就在这里。我们有100个外部500gb USB驱动器。每个驱动器将在一年中移动到一个新的位置。自动检测USB驱动器已插入Windows系统,然后分配Z:\驱动器盘符的最佳方法是什么?这些USB驱动器将被插入许多不同的计算机中,这样的脚本

import subprocess

diskpart_data = "z-drive.txt"
open (diskpart_data, "w").write ("""
select volume F: 
assign letter=Z
""")
subprocess.call ('diskpart /s %s' % diskpart_data)

由于移动USB驱动器在不同Windows系统上的动态特性,是否很难使用?您可以通过WMI自动检测或使用NTFS进行某种卷装载吗?

您可以尝试将该脚本编译为exe,并在运行该脚本的USB密钥中创建一个自动运行文件。然后脚本完成它的事情。
对于Z:\字母的分配,我建议使用Win32Com(尽管我不知道它是否能处理这个问题)或使用ctypes,这将使您能够控制windows DLL。

正如terabytest所说,您可以从驱动器根目录中的autorun.inf运行脚本。就个人而言,我会使用批处理脚本:

(echo select volume %~d0 && echo assign letter=Z) | diskpart
%~d0
检索当前执行的批处理文件的驱动器号


如果这还不够,有一种方法可以在使用Windows API插入可移动驱动器时通知您。您必须首先使用注册通知,然后在事件循环中处理消息。不幸的是,这需要一个事件循环,我不知道如何在python中轻松创建一个事件循环(除了从头开始创建:是一个示例消息循环,请注意,在您的情况下,不需要创建窗口,只需要创建一个消息循环).

如果Z:驱动器已在其插入的计算机上使用,您希望发生什么?脚本需要在驱动器上还是在其插入的每台windows计算机上?@Jim B我们选择Z:\驱动器,因为它未在当前环境中使用。客户端还将提前知道,在运行此脚本时,不会映射z:\驱动器@slurdge我们得到一个USB驱动器,运行一个不同的python脚本,将6000个视频移动到一个视频目录。然后我们使用访问模块在报告中创建超链接,引用这些视频。因此,映射z:\videos\可以全面使用,并且不会破坏报告中的链接。