启动一个QProcess,将PYTHONPATH设置为不同的python版本

时间:2013-08-31 15:21:27

标签: python python-2.7 python-3.x pythonpath qprocess

我使用python 3.3和Qt4.8创建了一个PyQt应用程序,我正在从它开始一个QProcess。新启动的子进程尝试运行python脚本,并且此脚本失败,因为它在3.3目录中搜索python模块(系统上的默认python为2.7)。

我认为它是在python 3.3目录中搜索python模块,因为子进程从父进程继承了它的环境(因此继承了PYTHONPATH)。我可以使用QProcess.setProcessEnvironment更改PYTHONPATH但是如何在使用python 3.3的PyQt应用程序中获取PYTHONPATH for 2.7的值?

修改 Viktor的下面答案为我工作。我需要从环境中移除PYTHONPATH和PYTHONHOME。我需要删除PYTHONHOME,因为否则我的应用程序的本地目录中使用了启动器(我使用py2app创建了app / package)。以下是代码:

systemEnvironment = QtCore.QProcessEnvironment.systemEnvironment()
systemEnvironment.remove( 'PYTHONPATH' )
systemEnvironment.remove( 'PYTHONHOME' )
process.setProcessEnvironment( systemEnvironment )

1 个答案:

答案 0 :(得分:1)

# Get the current environment end filter out the old
# PYTHONPATH variable if exists in the environment
env = [env for env in QtCore.QProcess.systemEnvironment()
       if not env.startswith('PYTHONPATH=')]
# Add your PYTHONPATH
env.append('PYTHONPATH=path_to_where_you_want')
# Create a process, set the environment and run the script
p = QtCore.QProcess()
p.setEnvironment(env)
p.start('perl abc.pl')

如果你想让子进程python只恢复它的默认值PYTHONPATH,只需从环境中删除当前的一个(跳过env.append部分)