Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.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
如何使用/通过Python脚本执行命令行程序?_Python_Ubuntu_Subprocess_Executable_Pythonpath - Fatal编程技术网

如何使用/通过Python脚本执行命令行程序?

如何使用/通过Python脚本执行命令行程序?,python,ubuntu,subprocess,executable,pythonpath,Python,Ubuntu,Subprocess,Executable,Pythonpath,我在~/trevor目录中有一个程序。使用Ubuntu,如果我cd到这个目录,那么我可以用 $/程序 然而,我希望能够在Python脚本中执行这个程序,但是当我尝试使用 import subprocess.run subprocess.run("./program") 我得到以下错误: OSError: [WinError 193] %1 is not a valid Win32 application 我怎样才能解决这个问题 我正在通过Pycharm的终端运行python脚本。我突然想到,

我在~/trevor目录中有一个程序。使用Ubuntu,如果我cd到这个目录,那么我可以用
$/程序

然而,我希望能够在Python脚本中执行这个程序,但是当我尝试使用

import subprocess.run
subprocess.run("./program")
我得到以下错误:

OSError: [WinError 193] %1 is not a valid Win32 application
我怎样才能解决这个问题

我正在通过Pycharm的终端运行python脚本。我突然想到,我可以通过Ubuntu的终端运行python脚本,但是Ubuntu在找到正确的软件包时遇到了问题。我用Ubuntu外壳运行Windows——我试图通过将Ubuntu的PYTHONPATH更改为与Pycharm的项目解释器相同的路径来解决Ubuntu包问题,但这也不起作用。我认为解决上述问题比解决包装问题更容易


谢谢你的帮助

据我所知,os.exec*通常适用于windows和linux,但在某些情况下,它确实需要一两个字母来替换“*”。你必须看看这个,看看你需要哪一个 例如os.execl或os.execle

SUBSPROCESS.call是一个较旧的版本,它可以避免shell特定约定的许多问题。如果问题是Ubuntu的诞生,正如上面的评论所暗示的,这可能会解决它

As,然后包含在:

错误是试图通过Windows命令行执行Ubuntu程序。这里的解决方案是通过Ubuntu命令行执行Python脚本(使用
subprocess.run()
subprocess.call()


就在Ubuntu上执行Python而言,找不到Python包/模块,这是因为这些包/模块是通过Windows命令行安装的,因此它们包含的本机/编译依赖项是为Windows而不是Ubuntu构建的。即使Ubuntu的PYTHONPATH指向包的位置,也有一些模块无法工作,因为它们有平台本机组件。解决方案是通过Ubunutu再次下载软件包(这样它们就适合Linux发行版)。

这不是Ubuntu错误,而是Windows错误。这显然不是Python的Ubuntu本机副本。在Windows+Ubuntu系统上使用Linux版Python,而不是Windows版。@CharlesDuffy感谢您的评论。事实上,从我的Ubunutu终端运行python脚本解决了subprocess.run(“./program”)问题,尽管仍然存在一个问题,即我的Linux shell不知道在哪里可以找到我的python包,因此脚本的其余部分无法运行。我已经尝试将PYTHONPATH更改为安装包的位置,尽管这似乎并没有涵盖所有包,因此脚本仍然失败。有什么想法吗?任何包含(或拉入包含)本机C模块的Python包,您都需要安装两次,每个平台一个。我建议保留两个不同的虚拟人。谢谢查尔斯,你是对的。我已经做到了,而且很有效。干杯!我正在将这个解决方案从一个问题编辑转移到一个社区维基答案,如本文所述。(“社区维基”意味着没有人能从投票/接受中获得声誉积分,并且鼓励任何人/每个人进行编辑以改进答案)。这样,您就可以接受答案,从而将问题标记为已解决。所有这些都在下面运行相同的系统调用,因此在尝试为不同平台调用二进制文件时,很容易出现相同的错误。