启动新的Python子进程Containig模块,并从Popen和当前的Env Inviffient Inviffien



我正在尝试使用以下代码作为子过程启动Python程序,但子过程将Importerrors输出到STDERR。

代码

import subprocess
import sys
import os
environment = os.environ
command = ["python", "-u", "/test/my_python_program.py"]
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=environment)
for line in iter(p.stdout.readline, ''):
    line = line.replace('r', '').replace('n', '')
    print line
    sys.stdout.flush()

错误

Traceback (most recent call last):
  File "/test/my_python_program.py", line 31, in <module>
    from PySide import QtGui, QtCore, QtNetwork
ImportError: dlopen(/Applications/Autodesk/maya2014/Maya.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python2.7/site-packages/PySide/QtGui.so, 2): Library not loaded: @executable_path/libpyside-python2.7.1.1.dylib
  Referenced from: /Applications/Autodesk/maya2014/Maya.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python2.7/site-packages/PySide/QtGui.so
  Reason: image not found

我正在从嵌入另一个程序的Python版本(Autodesk Maya)中运行代码。导致Importerror的模块可以从python解释器中导入。我的假设是,我可以向子过程提供主过程的python的env,以使其访问主要python实例的模块。

该方法有意义吗?如果是这样,我做错了什么?

edit1

我还尝试使用popen调用中使用的Python的嵌入式版本,并且保留错误。如果我删除导入的嵌入式版本的Python运行正常。

编辑2

这些是os.environ返回的环境变量

MAYA_MODULE_PATH
AUTOLOADER_LAPS
LOGNAME
USER
SUBSTANCES_LOCATION
PATH
HOME
MAYA_SCRIPT_BASE
MENTALRAY_INCLUDE_LOCATION
SHELL
MAYA_LICENSE_METHOD
MAYA_LICENSE
QT_MAC_NO_NATIVE_MENUBAR
MAYA_SCRIPT_PATH
MAYA_REVERSE_FILEFORMAT_EXT
WF_IMF_CIN_WHITE_POINT
MAYA_LOCATION
PYTHONPATH
SSH_AUTH_SOCK
MENTALRAY_SHADERS_LOCATION
Apple_PubSub_Socket_Render
MAYA_PRESET_PATH
XBMLANGPATH
MAYA_RENDER_DESC_PATH
MAYA_SHADER_LIBRARY_PATH
MENTALRAY_LOCATION
TMPDIR
__KMP_REGISTERED_LIB_5123
MAYA_PLUG_IN_PATH
MAYA_APP_DIR
PYTHONHOME
MAYA_PLUG_IN_RESOURCE_PATH
__CF_USER_TEXT_ENCODING
IMF_PLUG_IN_PATH
__CHECKFIX1436934
WF_IMF_CIN_CORRECTION

编辑3

这是PYHOME

的内容
/Applications/Autodesk/maya2014/Maya.app/Contents/Frameworks/Python.framework/Versions/Current

玛雅内部运行的python并不是完全标准的...

从Maya内部运行时,您可能需要使用mayapy命令来启动Python。根据Autodesk的要求,此引导架Python,并应确保运行Python所需的环境是正确的。(尽管我认为这可能是您在Edit1中所指的)。

您是否也尝试过不穿过环境到popen命令?我认为popen的默认行为是继承您想要的当前过程"环境"。我希望环境在某个时候设置DYLD_LIBRARY_PATH和/或DYLD_FRAMEWORK_PATH,以说明QT在哪里。

相关内容

  • 没有找到相关文章

最新更新