我已经为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副本中调用某些内容?
答案 0 :(得分:0)
答案是 Eryk Sun 发布的对该问题的评论:
<块引用>您运行的是 32 位 Python,因此 System32 被重定向到没有 bash.exe 的 SysWOW64。使用 64 位 Python 或“C:\Windows\SysNative\bash.exe”。 “SysNative”是为 32 位 WOW64 进程实现的虚拟目录,用于运行 64 位系统可执行文件。