Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows 10上从python调用bash_Python_Windows_Bash_Powershell_Subprocess - Fatal编程技术网

在Windows 10上从python调用bash

在Windows 10上从python调用bash,python,windows,bash,powershell,subprocess,Python,Windows,Bash,Powershell,Subprocess,我已经为Windows10安装了Ubuntu组件 在Ubuntu中,我安装了tesseract。因此,在bash中,我可以运行以下命令: $ tesseract /mnt/c/Code/screenshot.png stdout 它是有效的 在PowerShell中,我可以做到这一点,它也可以工作: PS> bash -c "tesseract /mnt/c/Code/screenshot.png stdout" 不起作用的是从Windows PowerShell启动Python2.7

我已经为Windows10安装了Ubuntu组件

在Ubuntu中,我安装了tesseract。因此,在bash中,我可以运行以下命令:

$ tesseract /mnt/c/Code/screenshot.png stdout
它是有效的

在PowerShell中,我可以做到这一点,它也可以工作:

PS> bash -c "tesseract /mnt/c/Code/screenshot.png stdout"
不起作用的是从Windows PowerShell启动Python2.7.13并试图从中调用bash。我一开始试过这个:

>>> from subprocess import check_output
>>> check_output(['bash', '-c', 'tesseract /mnt/c/Code/screenshot.png stdout'])
这给了我:WindowsError:[错误2]系统找不到指定的文件

如果我将其简化为:

>>> check_output(['bash'])
我也犯了同样的错误

>>> check_output(['bash'], shell = True)
现在我得到:'bash'不被识别为内部或外部命令、可操作程序或批处理文件

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

>>> check_output([r'C:\Windows\System32\bash.exe'], shell = True)
但它只是指出:“C:\Windows\System32\bash.exe”不能被识别为内部或外部命令、可操作程序或批处理文件


这是怎么回事?在Windows 10的PowerShell上运行的Python实例中,我如何调用Ubuntu组件为Windows 10安装的bash副本中的某些内容?

答案是Eryk Sun发布的关于这个问题的评论:


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


答案是Erik Sun发布的关于这个问题的评论:


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


您正在运行32位Python,因此System32被重定向到SysWOW64,它没有bash.exe。使用64位Python或C:\Windows\SysNative\bash.exe。SysNative是为32位WOW64进程实现的虚拟目录,用于运行64位系统可执行文件。@eryksun-Perfect!非常感谢。请加上这个作为答案,这样我就可以接受并投票了。这似乎是一个巨大的缺点,错误消息根本没有提到这一点。。。你只需要知道它是重定向的东西,并且你需要使用Synistic来实际到达Stase32……行为是这样的,所以有人为了在64位窗口中运行的32位应用程序而得到报酬,应该考虑通过DOCS仅仅是工作的一部分。对于志愿者和业余爱好者来说,在编写一行代码之前花几个小时阅读枯燥的文档是一种痛苦,这是可以理解的。@eryksun-我愿意打赌,除了我,公司里没有人知道这种行为,因为你刚刚告诉过我。这是一个模糊的factoid,在我十多年的编程生涯中从未出现过。也许一个系统管理员会知道这件事。作为一个习惯macOS的人,我最大的想法是,32位与64位如何仍然是一个问题?现有的32位程序应该不经修改就可以工作,而且其中许多程序都是硬编码的,比如直接从System32加载DLL。它可以以不同的方式实现,但我不知道设计决策中的所有因素。我知道最终的结果是WOW64充满了鬼鬼祟祟的魔法,需要阅读文档以避免意外。您正在运行32位Python,因此System32被重定向到SysWOW64,而SysWOW64没有bash.exe。使用64位Python或C:\Windows\SysNative\bash.exe。SysNative是为32位WOW64进程实现的虚拟目录,用于运行64位系统可执行文件。@eryksun-Perfect!非常感谢。请加上这个作为答案,这样我就可以接受并投票了。这似乎是一个巨大的缺点,错误消息根本没有提到这一点。。。你只需要知道它是重定向的东西,并且你需要使用Synistic来实际到达Stase32……行为是这样的,所以有人为了在64位窗口中运行的32位应用程序而得到报酬,应该考虑通过DOCS仅仅是工作的一部分。对于志愿者和业余爱好者来说,在编写一行代码之前花几个小时阅读枯燥的文档是一种痛苦,这是可以理解的。@eryksun-我愿意打赌,除了我,公司里没有人知道这种行为,因为你刚刚告诉过我。这是一个模糊的factoid,在我十多年的编程生涯中从未出现过。也许一个系统管理员会知道这件事。作为一个习惯macOS的人,我最大的想法是,32位与64位如何仍然是一个问题?现有的32位程序应该不经修改就可以工作,而且其中许多程序都是硬编码的,比如直接从System32加载DLL。它可以以不同的方式实现,但我不知道设计决策中的所有因素。我知道最终的结果是WOW64充满了鬼鬼祟祟的魔法,需要读取t 他做手术以避免意外。