【问题标题】:Can't popen new instance of python.exe无法打开 python.exe 的新实例
【发布时间】:2015-07-25 00:13:51
【问题描述】:

有一个项目我需要同时使用 Python 3.3 和 2.7。我正在尝试在 Python 2.7 下启动一个脚本,但它不起作用。这是一个简单的例子。

first.py

import subprocess
import sys
print('Inside first.py')
print(sys.version)
subprocess.Popen(["C:\Python27\ArcGISx6410.2\Python.exe", "second.py"])

second.py

import arcpy

print 'This is second.py'

这不起作用,输出是

Inside first.py
3.3.5 (v3.3.5:62cf4e77f785, Mar  9 2014, 10:35:05) [MSC v.1600 64 bit (AMD64)]
  File "C:\Python33\lib\site.py", line 173
    file=sys.stderr)
        ^
SyntaxError: invalid syntax

这就是整个堆栈跟踪。如果我用notepad.exe 替换C:\...Python.exe,那么它就可以了。我在 Windows 7 上使用 Liclipse。

更新:似乎运行了不同版本的 Python,当从命令行 python first.py 是 3.3 但 py first.py 或只是 first.py 然后使用 2.7。

【问题讨论】:

  • 正如我昨天在对(现已删除?)重复问题的评论中所说:(1)首先运行最简单的python 2脚本,即从second.py中删除import arcpy,看看它是否有效(2) 将import sys; print sys.version(没有括号!)放入second.py 并运行。如果您看到 Python 3 而不是 Python 2,那么 找出为什么 C:\Python27 文件夹(建议 Python _2.7_ 版本)包含 python _3_ 可执行文件。 (3) 从命令行运行 first.py (cmd .exe),获取完整的回溯
  • @J.F.Sebastian 这取决于我如何运行它。 python first.py 导致 second.py 以 2.7 运行,但 py first.pyfirst.py 导致 second.py 以 3.3 运行。如果我尝试从 Eclipse 运行,它就会崩溃。

标签: python python-2.7 python-3.x popen


【解决方案1】:

试试:

import os
subprocess.Popen(["C:\\Python27\\ArcGISx6410.2\\Python.exe", "second.py"], env=dict(os.environ, PYTHONHOME="C:\\Python27\\ArcGISx6410.2"))

Windows 上的 Python 有时需要一些帮助来确定要使用哪个版本的标准库。

【讨论】:

  • 感谢您的尝试,但现在它提供了File "C:\Python27\ArcGISx6410.2\lib\subprocess.py", line 660, in __init__ raise TypeError("bufsize must be an integer") TypeError: bufsize must be an integer
  • Wahohahahah0oh hoa 成功了!!!干得好@kirbyfan64sos,这对我们来说真的很重要!
  • @Celeritas 在我的编辑中?我忘记了关键字参数说明符env=,所以我最终意外地将环境传递给了缓冲区大小。 ://
  • 我想知道为什么有必要设置 PYTHONHOME,因为它似乎会影响父进程而不是子进程(并且子进程是使用 2.7 的 python.exe 打开的)?
  • @Celeritas 我相信 Python 将标准库的位置存储在注册表中。由于某些(愚蠢的)原因,当您安装 Python 2 3 时,库会发生冲突,导致 Python 2 读取 3 的库位置并最终加载 Python 3 模块而不是 Python 2 模块。 Popenenv 参数允许在子进程中设置环境变量。在这里,我使用它将PYTHONHOME 设置为正确的标准库文件夹。
猜你喜欢
  • 2013-04-13
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
  • 2010-10-10
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多