1

実行中の QProcess の QT アプリで環境変数を設定しようとしています。コードは以下です。ただし、テスト内では環境変数は設定されていないようです。助言がありますか?

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"))
4

2 に答える 2

1

あなたが投稿したコードは明らかに間違っているようには見えず、私にとってはうまくいきます。

これが私のテストファイルと出力です:

Makefile

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
于 2012-10-04T22:09:43.000 に答える
1

http://docs.python.org/library/os.html#os.environを使用してみましたか? これにより、現在のプロセスの環境が変更されました (/proc でも確認できます)。

この新しい環境は、生成されたプロセスにも渡される必要があります。

于 2012-10-04T18:32:22.240 に答える