【发布时间】:2017-05-23 10:59:47
【问题描述】:
我有一组 python 模块,我想在 linux 和 MinGW (Windows) 上工作。
虽然 subprocess 在 Linux 上运行良好,但在 windows subprocess.call/Popen 上不断抛出错误,提示找不到所需的二进制文件。
例如,我经常使用 Xilinx 的 Vivado(EDA 工具)。虽然只是在 mingw 提示符中输入“vivado”可以正常工作并启动 vivado,但如果我尝试通过子进程调用 vivado,我会收到一条错误消息,提示找不到文件。
我的 mingw 环境路径变量包含:/c/Xilinx/Vivado/2015.2/bin,这是找到 vivado 二进制文件的位置。如果我启动 python 并执行此操作,
print os.environ['PATH']
我看到它包含:C:\\Xilinx\\Vivado\\2015.2\\bin;
所以我猜 python 在启动时执行了适当的翻译。
此外,如果我尝试从 python 的子进程启动 vivado.bat(与二进制文件位于同一目录中的文件)而不是 vivado,则一切正常,并且二进制文件已启动。
vivado 二进制文件有执行权限...
所以我的问题是。这个问题是已知的吗?最干净的解决方法是什么?
谢谢!
【问题讨论】:
-
能否请您分享问题的上下文(python 版本、路径等),特别是启动该过程的代码部分。
-
首先改变路径的不是python,而是MinGW。其次,你能发布你的代码和你得到的确切输出吗? (也有 PATH 打印)。如果您有 2 个“vivado”文件(一个 .bat 和一个 .exe,您可能需要指定扩展名,因为这可能是个问题。另一个“vivado”文件的扩展名是什么?帮助我们帮助您:)
-
感谢您的回复,但我已经解决了这个问题。我对 subprocess.Popen 进行了一些动态修改以检测当前平台并根据 Windows 版本调用 Windows Powershell 或 cmd,但我意识到这种方法都是错误的。我这样做是因为我不认为这个问题与我特别调用的工具有关,所以我不想更改平台函数调用的二进制文件,我现在意识到这更干净,可能更好。我现在在 Windows 中调用 .bat,否则调用二进制文件。
标签: python subprocess mingw