Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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 3_Python_Python 3.x_Macos_Shell_Subprocess - Fatal编程技术网

强制子进程使用Python 3

强制子进程使用Python 3,python,python-3.x,macos,shell,subprocess,Python,Python 3.x,Macos,Shell,Subprocess,因此,我试图编写一个Python脚本,它利用subprocess调用同一目录中的另一个Python脚本。这一切都进行得很顺利,直到第二个脚本中的import语句到达一个纯Python 3库,并且由于脚本是使用子进程打开的,而子进程又使用Python 2,因此发生了一个ImportError 如何强制子进程,特别是Popen(),使用Python 3打开脚本?网上似乎没有关于这方面的建议 编辑 虽然我总是默认发布MWE,但对于这个问题,我认为这是不必要的,但无论如何,在我开始发布MWE时,我突然想

因此,我试图编写一个Python脚本,它利用
subprocess
调用同一目录中的另一个Python脚本。这一切都进行得很顺利,直到第二个脚本中的import语句到达一个纯Python 3库,并且由于脚本是使用
子进程打开的,而子进程又使用Python 2,因此发生了一个
ImportError

如何强制
子进程
,特别是
Popen()
,使用Python 3打开脚本?网上似乎没有关于这方面的建议

编辑 虽然我总是默认发布MWE,但对于这个问题,我认为这是不必要的,但无论如何,在我开始发布MWE时,我突然想到使用“python3”而不仅仅是“python”

stream = subprocess.Popen(['python3', 'app.py'])

现在这个应用程序可以工作了。奇怪的是,我自己只安装了一个Python版本(3.7),而
Python
重定向到
python3
,所以我不得不手动指定
python3

以下是一种强制脚本使用python3运行的方法:

#! /usr/bin/python3

import sys, subprocess

if sys.version_info[:2] < (3, 0):
    # FORCE PYTHON3
    code = subprocess.check_call(['python3'] + sys.argv)
    raise SystemExit(code)

print("Using Python v%d.%d" % sys.version_info[:2])

您的
子流程
命令当前看起来像什么?您是否可以将
python3
的路径作为命令中的第一个元素来传递?一些代码如何再现您的问题?
subprocess.run(['python3',scriptname])
应该在大多数平台上执行Python 3,包括通过自制安装了Python 3的MacOS。如果你的不同,也许可以调查它的不同之处,以及在你的具体情况下如何解决这个问题。最好使用
子流程。在大多数情况下,检查调用
子流程。运行
。@tripleee:只是好奇:为什么?如果有充分的理由,我很乐意更改代码。对于这个特定的用例,可能不那么重要,尽管我不确定您对OP问题的解释是否是我所期望的。有关差异的详细说明,请参阅(可能太长)。@tripleee:
subprocess.run
在Python2.7.Nope中似乎不可用;同样,请参阅我上面提供的链接。
> python3 force_python3.py                                                                                                                         
Using Python v3.7

> python2 force_python3.py                                                                                                                         
Using Python v3.7