4

Linux カーネルの再コンパイル用の GUI の開発に取り組んでいます。このために、Python から 4 ~ 5 個の Linux コマンドを実装する必要があります。Qt を GUI デザイナーとして使用しています。os.system()callを使用してコマンドを正常に実装しました。ただし、出力はコンソールで取得されます。本当の問題は、コマンドの出力が、ほぼ 20 ~ 25 分の連続印刷にかかるリストであることです。このコンソール出力を Qt で設計されたテキスト ボックスに転送する方法。setSource()ソースをライブコンソール出力として使用して、Qtで操作を実装するのを手伝ってくれる人はいますか。

4

3 に答える 3

7
self.process = QProcess()
self.connect(self.process, SIGNAL("readyReadStdout()"), self.readOutput)
self.connect(self.process, SIGNAL("readyReadStderr()"), self.readErrors)
tarsourcepath="sudo tar xvpf "+ self.path1
self.process.setArguments(QStringList.split(" ",tarsourcepath))
self.process.start()



def readOutput(self):

    self.textBrowser2.append(QString(self.process.readStdout()))
    if self.process.isRunning()==False:
        self.textBrowser2.append("\n Completed Successfully")




def readErrors(self):
    self.textBrowser2.append("error: " + QString(self.process.readLineStderr()))

これは私にとって非常に良い仕事をしました。皆さん、ありがとうございました。

于 2010-05-22T15:58:48.287 に答える
1

私は主にwxPythonを扱っていますが、http: //diotavelli.net/PyQtWiki/Capturing_Output_from_a_Processは機能するソリューションですか?

ページから:

問題:多くの情報をコンソールに出力し、出力をテキストエディターまたはブラウザーに表示するプロセスを実行したいのですが、その結果、プロセスが終了するまでGUIがフリーズします。

解決策(考えられる多くの1つ): QProcessオブジェクトを作成し、そのシグナルをクラス内のいくつかのスロットに接続し、必要な引数を渡して開始します。プロセスのstdoutおよびstderrに関するデータがスロットに配信されます。

続く...

于 2010-05-18T17:20:04.307 に答える
0

パイプの使用が思い浮かびます。プログラムの出力を読み取る(そして新しい行が追加されるたびにイベントをGUIに送信する)バックグラウンドスレッドを使用できます。

したがって、基本的な考え方は次のとおりです。

os.chdir("/usr/src/linux-2.6.34")

p = os.popen("make", "r")
try:
    while True:
        line = p.readline()
        if not line:
            break

        # Replace this with a GUI update event (don't know anything about Qt, sorry)
        print line
finally:
    # Cf. http://docs.python.org/library/os.html#os.popen
    programReturnValue = p.close() or 0
于 2010-05-18T17:22:32.227 に答える