【问题标题】:System Call in Python via MINGW32 on Windows在 Windows 上通过 MINGW32 在 Python 中进行系统调用
【发布时间】:2014-11-04 18:37:31
【问题描述】:

我正在尝试找出一种在 Windows 机器上从我的 python 脚本调用 wget 的方法。我在机器上的 /bin 下安装了 wget。无论我尝试什么,使用 subprocess 或 os 模块进行调用似乎都会引发错误。我假设这与我需要通过 minGW 路由我的 python 系统调用以便识别 wget 的事实有关。

有人知道怎么处理吗?

谢谢

【问题讨论】:

  • 确保可以先在 cmd.exe 中运行。您可以使用 wget 的完整路径或将 /bin 附加到环境变量 PATH。
  • 向我们展示您尝试过的代码。如果您使用shell=True,您是否尝试过不使用它?或者将COMSPEC 环境变量设置为MinGW shell 而不是默认的cmd.exe
  • 当我在 mingw 中执行 'echo $PATH' 时,我发现 /bin 在环境路径中。我知道 mingw 识别 'wget' 但 Windows 中的命令提示符没有。因此,我的 python 也不行。我尝试将 \bin 添加到 Windows 路径变量,但它似乎不起作用。我使用了'setx path "%path%;\bin"'。更改显示在路径中,但命令提示符仍然无法识别“wget”或“wget.exe”。此外,一般来说,我似乎无法通过命令提示符导航到 \bin,而在 mingw 中我可以。对此有什么想法吗?
  • 我可以从 python 中执行“调用(“cmd.exe”)”并打开命令提示符。当我从 python 执行“call("cmd.exe",shell=True)' 时,我发现某些东西在 IDLE 中运行了一分钟,然后什么也没有,没有命令提示符出现。

标签: python windows wget system-calls mingw32


【解决方案1】:

“MinGW”下没有这样的东西。您可能是指在 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 版本是 Python 的标准 Windows 端口。由于它是一个普通的 Windows 应用程序,它不会像您期望的那样解释 PATH 环境变量。路径中有/bin,它将搜索当前驱动器的\bin目录。由于 wget 位于当前目录的 C:\MSYS\bin 而不是 \bin 中,因此尝试从 Python 运行它时会出错。

请注意,如果您从 MSYS shell 运行 Windows 命令,MSYS 将自动将其PATH 转换为 Windows 兼容格式,将 MSYS 路径名更改为 Windows 路径名。这意味着您应该能够通过从 MSYS shell 运行 Python 来让您的 Python 脚本工作。

【讨论】:

  • 确实如此。在您发布此内容之前,我意识到路径问题并决定快速将 wget.exe 的副本放在 C:\Windows 下。现在在运行 python 时可以识别它。这是关于 msys 运行 python 的一个很好的说明......我必须尝试一下......一旦我的路径变量不是那么可怕。谢谢
猜你喜欢
  • 2016-08-30
  • 1970-01-01
  • 2013-06-16
  • 2016-11-06
  • 2018-11-06
  • 2011-03-29
  • 2011-04-17
  • 2016-12-20
  • 1970-01-01
相关资源
最近更新 更多