私はloginfoでテキスト領域を連続的に更新する方法を理解しようとしています。私は、次の(私のコードから抜粋)pyqtの `less + F logfile`
import sys
import os
import PyQt4.QtGui as gui
import PyQt4.QtCore as core
class ApplicationWindow(gui.QMainWindow):
'''
Our main application window
'''
def __init__(self):
gui.QMainWindow.__init__(self)
self.main_widget = gui.QWidget(self)
l = gui.QHBoxLayout(self.main_widget)
self.te = gui.QPlainTextEdit()
self.rdock = gui.QDockWidget("Output",self)
self.rdock.setWidget(self.te)
self.te.setReadOnly(True)
self.addDockWidget(core.Qt.RightDockWidgetArea,self.rdock)
self.run_command("less +F test.txt")
self.main_widget.setFocus()
self.setCentralWidget(self.main_widget)
def run_command(self,fcmd):
'''
Runs our desired command and puts the output into the right dock
'''
cmd = str(fcmd)
stdouterr = os.popen4(cmd)[1].read()
self.te.setPlainText(stdouterr)
qApp = gui.QApplication(sys.argv)
aw = ApplicationWindow()
aw.setWindowTitle("%s" %progname)
aw.show()
sys.exit(qApp.exec_())
ここに私の問題は、プログラムがハングアップするということですがあります。私は出力を継続的に表示できるようにしたいと思うし、最終的にはそのコマンドをkillしてless +F otherFile.txt
を実行したいと思うでしょう。私はless
コマンドを使用することに専念していない、私はちょうどファイルの連続した末尾を見たい。
私はこのように、スレッドを使用して試してみましたが、無駄に
runThread = threading.Thread(target=self.run_command("less +F test.txt"))
runThread.daemon = True
runThread.start()
は、私はメインをブロックしていないんだように、私は別のスレッドでのostreamコマンドを実行する必要がある印象を取得していますしかし、これを行うにはどうすればよいかわかりません。
これはほぼ完璧です。私はちょうど実際のユースケースで2つの問題があります。最初は 'test.txt'でテキストが積極的に生成されていますが、ウィンドウは更新されません(' less + F'と同じように)。もう一つは、私の出力にはテールエンドのみを表示したいのです。これは常に先頭から始まり、ファイル全体を表示します。 –
最初の点はうまくいきます。テストを行っている様子、つまり.txtファイルの編集方法を教えてください。 – eyllanesc
最後の要素を印刷する場合は、代わりにtailを使う必要があります。少ない'tail -5 test.txt' – eyllanesc