在Cygwin中运行Windows驱动器扫描Python程序报错的解决需求
适配Cygwin环境的Windows驱动器扫描与目录创建方案
没问题,我帮你把这段代码改成能在Cygwin里正常跑的版本~
先说说为啥原来的代码在Cygwin里报错:Cygwin本质是在Windows上模拟POSIX环境,它没有Windows的kernel32.dll那套API,所以你导入windll肯定会炸。不过Cygwin把Windows的驱动器都挂载到了/cygdrive/目录下,我们可以利用这个特性来实现同样的功能。
下面是修改后的代码,我会逐点说明改动:
import os import string def get_drives(): drives = [] # Cygwin把Windows驱动器挂载在/cygdrive/下,遍历这个目录获取驱动器字母 cygdrive_path = "/cygdrive" if os.path.exists(cygdrive_path): # 遍历目录下的所有子项,这些就是驱动器字母(比如c、d) for item in os.listdir(cygdrive_path): # 只保留字母(避免可能的非驱动器目录) if item in string.ascii_uppercase + string.ascii_lowercase: drives.append(item.upper()) return drives def create_temp_dir(drives): if not drives: print("没有找到可用的Windows驱动器") return # 转换成Cygwin的POSIX路径格式:/cygdrive/[盘符]/temp newpath = f"/cygdrive/{drives[0].lower()}/temp" if not os.path.exists(newpath): print(f"creating {newpath}") os.makedirs(newpath) if __name__ == '__main__': drives = get_drives() print(drives) create_temp_dir(drives)
关键改动说明:
- 移除了
ctypes相关的导入和调用,换成了扫描Cygwin的挂载目录/cygdrive/ - 路径格式从Windows的
X:\temp改成了Cygwin兼容的/cygdrive/x/temp(注意盘符小写,Cygwin里这个目录是小写的) - 增加了空驱动器的判断,避免报错
- 把原来Python2的
string.uppercase换成了兼容Python2/3的string.ascii_uppercase,同时处理了大小写问题
测试说明:
运行这段代码后,会输出你系统上所有被Cygwin挂载的Windows驱动器(比如['C', 'D']),然后在第一个驱动器的根目录下创建temp文件夹,对应Windows里的C:\temp或者D:\temp。
如果你的Cygwin没有自动挂载所有驱动器,可以手动通过mount命令添加,比如mount C: /cygdrive/c。
内容的提问来源于stack exchange,提问作者IrAM
相关产品推荐
相关产品推荐

