You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:24:29