当我从PyDev运行我的脚本时,故事以一个非常奇怪的错误开始。从外部运行相同的脚本不会遇到同样的问题。
Fatal Python error: Py_Initialize: can't initialize sys standard streams File "C:\Python26\lib\encodings\__init__.py", line 123 raise CodecRegistryError,\ ^ SyntaxError: invalid syntax This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information.
我能够找到原因:在PyDev中我使用了两个不同的Python版本:3.1是默认安装,2.6是替代版本。
我的Windows环境不包含PYTHONHOME
,CLASSPATH
,PYTHONPATH
,但PyDev会添加它们。
现在问题是在一个阶段我的python脚本使用os.system(python second.py
)执行另一个python脚本,第二个脚本将因上述错误而失败。
现在我正在寻找一种方法来防止这个问题发生,因为它将使用非默认设置(由PyDev添加)运行执行默认python。
我不想更改标准调用(python file.py
),但我希望能够毫无问题地从pydev运行我的脚本,并且能够使用默认或替代python环境。
有什么想法吗?
答案 0 :(得分:2)
我找到了一个特殊的接缝解决方案,因为它不会干扰在其他系统上运行脚本,只是为了运行python -E second.py
- 这将迫使Python忽略PYTHON *环境变量。
答案 1 :(得分:0)
我可能不太明白这一点,但我认为你正在调用pydev中的一个脚本,但是这个脚本执行另一个需要不同版本的脚本。
虽然遗憾的是这是特定于安装的,但您可以使用os.system(“c:\ absolute \ path \ to \ proper \ version \ of \ python.exe second.py”)。
如果PyDev正在设置冲突的环境变量,您可能需要查看os.system上的子进程。
http://docs.python.org/library/subprocess.html#using-the-subprocess-module
这将允许您使用句柄调用进程,因此您可以选择等待它终止。它还允许您在执行时传递环境变量。
答案 2 :(得分:0)
我相信你的电话应该是:
导入sys
os.system(sys.executable +'second.py')
这样你就可以保证你正在使用你正在运行的同一个解释器,而不是启动另一个解释器(或者你真的想使用另一个解释器吗?)