在Windows上通过MINGW32在Python中进行系统调用
我正在尝试在我的Windows电脑上,从Python脚本中调用wget这个工具。我已经把wget安装在机器的/bin文件夹下了。不管我用subprocess还是os模块来调用它,总是会出现错误。我猜这可能是因为我需要通过minGW来处理我的Python系统调用,这样wget才能被识别。
有没有人知道该怎么解决这个问题?
谢谢
1 个回答
1
在“MinGW”下并没有你说的那种东西。你可能是想说在MSYS下,MSYS是一个在Windows上模拟Unix环境的工具。MSYS让你的操作看起来像是在Unix系统上,但其实你还是在Windows里运行所有东西。特别是,MSYS会把/bin
映射到你安装MSYS的驱动器和目录。如果你把MSYS安装在C:\MSYS
,那么你的MSYS的/bin
目录实际上就是C:\MSYS\bin
。
当你把/bin
添加到MSYS的PATH
环境变量时,MSYS会在C:\MSYS\bin
这个目录里查找。而当你使用命令SETX
把/bin
添加到Windows的PATH
环境变量时,Windows会在当前驱动器的\bin
目录里查找。
假设你使用的Python是标准的Windows版本。因为它是一个普通的Windows应用程序,所以它不会像你期待的那样解释PATH
环境变量。加上/bin
后,它会在当前驱动器的\bin
目录里查找。由于wget
在C:\MSYS\bin
而不是当前目录的\bin
里,所以当你试图从Python运行它时会出现错误。
需要注意的是,如果你从MSYS的命令行运行一个Windows命令,MSYS会自动把它的PATH
转换成Windows兼容的格式,把MSYS的路径名变成Windows的路径名。这意味着你应该可以通过在MSYS的命令行中运行Python来让你的Python脚本正常工作。