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