Python PyQt如何为QProcess设置环境变量?

时间:2012-10-04 18:26:48

标签: python qt pyqt environment-variables

我正在尝试在QT应用中为正在运行的QProcess设置环境变量。代码如下。但是在测试内部时,似乎没有设置环境变量。有什么建议吗?

def runUbootTests(self):
    env = QtCore.QProcessEnvironment.systemEnvironment()
    env.insert("LINUX_ETH_ADDR", "3c:98:bf:00:00:f4")
    self.process.setProcessEnvironment(env)
    self.process.readyReadStandardOutput.connect(self.readReady)
    self.process.start("make", ("clean", "check_uboot"))

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用http://docs.python.org/library/os.html#os.environ?这修改了当前进程的环境(也可以在/ proc中看到)。

这个新环境也应该传递给任何衍生进程。

答案 1 :(得分:1)

您发布的代码似乎并不明显错误,对我有用。

这是我的测试文件和输出:

生成文件

clean:  
    @echo 'SHELL:' $(SHELL)

check_uboot:    
    @echo 'ADDR:' $(LINUX_ETH_ADDR)

test.py

from PyQt4 import QtGui, QtCore

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.button = QtGui.QPushButton('Test', self)
        self.button.clicked.connect(self.handleButton)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.button)
        self.process = QtCore.QProcess(self)

    def handleButton(self):
        env = QtCore.QProcessEnvironment.systemEnvironment()
        env.insert("LINUX_ETH_ADDR", "3c:98:bf:00:00:f4")
        self.process.setProcessEnvironment(env)
        self.process.readyReadStandardOutput.connect(self.readReady)
        self.process.start("make", ("clean", "check_uboot"))

    def readReady(self):
        print str(self.process.readAllStandardOutput())

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

输出

$ python2 test.py
SHELL: /bin/sh

ADDR: 3c:98:bf:00:00:f4