在Windows 10上从python调用bash

时间:2017-06-15 20:36:34

标签: python windows bash powershell subprocess

我已经为Windows 10安装了Ubuntu组件。

在Ubuntu中,我安装了tesseract。所以在bash中,我可以运行这个命令:

$ tesseract /mnt/c/Code/screenshot.png stdout

它有效。

在PowerShell中,我可以这样做,它也有效:

PS> bash -c "tesseract /mnt/c/Code/screenshot.png stdout"

什么是无效的是从Windows PowerShell启动Python 2.7.13并尝试从中调用bash。我一开始就试过这个:

>>> from subprocess import check_output
>>> check_output(['bash', '-c', 'tesseract /mnt/c/Code/screenshot.png stdout'])

这给了我:WindowsError: [Error 2] The system cannot find the file specified

如果我将其减少到这个:

>>> check_output(['bash'])

我得到了同样的错误。

>>> check_output(['bash'], shell = True)

现在我得到:'bash' is not recognized as an internal or external command, operable program or batch file.

好。对bash.exe的位置进行了一些研究。我在C:\Windows\System32\bash.exe找到了它。但这仍然不起作用:

>>> check_output([r'C:\Windows\System32\bash.exe'], shell = True)

但它只是吐出来的:'C:\Windows\System32\bash.exe' is not recognized as an internal or external command, operable program or batch file.

这里发生了什么?从在Windows 10上运行在PowerShell上的Python实例,如何在Windows 10的Ubuntu组件安装的bash副本中调用某些内容?

1 个答案:

答案 0 :(得分:0)

答案是 Eryk Sun 发布的对该问题的评论:

<块引用>

您运行的是 32 位 Python,因此 System32 被重定向到没有 bash.exe 的 SysWOW64。使用 64 位 Python 或“C:\Windows\SysNative\bash.exe”。 “SysNative”是为 32 位 WOW64 进程实现的虚拟目录,用于运行 64 位系统可执行文件。