Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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命令的子进程Popen_Python_Python 3.x_Subprocess_Popen - Fatal编程技术网

运行python命令的子进程Popen

运行python命令的子进程Popen,python,python-3.x,subprocess,popen,Python,Python 3.x,Subprocess,Popen,我需要在Popen中运行python命令。问题是该命令需要在python3中运行,并且我需要它是可移植的,这意味着我不能在任何情况下都使用python3别名 我有一些电脑,python已经是正确的版本了,还有一些电脑的正确版本是python3。我试着插入/usr/bin python3在文件的开头,然后作为python运行,但它不起作用 我无法修改环境变量以将python3更改为python。我想知道是否有一种方法可以检查我需要使用哪一种,或者是否有一种方法可以仅在Popen命令中将python

我需要在Popen中运行python命令。问题是该命令需要在python3中运行,并且我需要它是可移植的,这意味着我不能在任何情况下都使用python3别名

我有一些电脑,python已经是正确的版本了,还有一些电脑的正确版本是python3。我试着插入/usr/bin python3在文件的开头,然后作为python运行,但它不起作用

我无法修改环境变量以将python3更改为python。我想知道是否有一种方法可以检查我需要使用哪一种,或者是否有一种方法可以仅在Popen命令中将python3更改为python

我尝试运行的Popen命令非常简单,不,我不能只导入文件并作为类使用。。。它需要通过波本来运行。此外,virtualenv或类似产品也不是一种选择


subprocess.Popen['python','main.py'],shell=True,universal\u newlines=True/usr/bin/python或/usr/bin/python3-只有在您自己没有显式选择解释器的情况下才值得尊敬:如果您运行python foo.py,操作系统将调用特定的python解释器,并将其作为参数传递给foo.py,并将其解释为应该运行的脚本的名称;而当您运行./foo.py时,您是在告诉操作系统本身确定要使用哪个解释器来运行foo.py,这是通过查看shebang实现的

要让操作系统选择,只需显式指定脚本的名称:

subprocess.Popen(['./main.py'], universal_newlines=True)

shell=True在这里破坏了您的代码:它所运行的相当于命令sh-c'python''main.py';您可以在shell中测试它是否在那里工作,因为只有紧跟-c之后的参数被视为shell脚本;之后的参数变成$0、$1等,但该脚本不查找它们,因此它们被忽略-而对于shell=False,您运行的相当于shell命令python main.py。@CharlesDuffy真的吗?可以从控制台直接运行python main.py吗?python main.py在shell提示符下工作,sh-c python main.py不适用于值为“不工作”,其中main.py参数被忽略。您还可以通过比较echo hello和sh-c echo hello在交互式shell中测试这一点;在前面的sh-c-由Python的shell=True添加的情况下,hello被忽略,只有一条空行被回响……无论如何,朝着您的主要问题前进:如果您已经将shebang更改为/usr/bin/python3在需要这样做的平台上,那么剩下的唯一必要的事情就是运行/path/to/yourscript而不是python/path/to/yourscript,这样shebang就得到了尊重。因此subprocess.Popen['./main.py']将尊重这一点/usr/bin/python3或/usr/bin/python或/usr/bin/env python3或其他任何东西。它只在mac上工作。。。在windows上,即使shell=True也不起作用…'是否不被识别为内部或外部命令、可操作程序或批处理文件?如果PyLauncher工具可用且在路径中,您应该能够在Windows上使用py-3 main.py。请参阅-据我所知,它随Python3一起出厂。不过,Windows不是我的原生平台,所以请恕我直言。另请参阅,描述Windows上的py命令——除其他外,它的目的是能够读取一个通常只有UNIX的文件,并发送到相应的Python安装。