QProcess의 ReadyReadStandardOutput 신호가 없습니다
문제
다음을 실행할 때 ReadyStandardOutput 신호를받지 않는 이유는 무엇입니까?
import os, sys, textwrap
from PyQt4 import QtGui, QtCore
out_file = open("sleep_loop.py", 'w')
out_file.write(textwrap.dedent("""
import time
while True:
print "sleeping..."
time.sleep(1)"""))
out_file.close()
def started():
print "started"
def on_error(error):
errors = ["Failed to start", "Crashed", "Timedout", "Read error",
"Write Error", "Unknown Error"]
print "error: ", errors[error]
def on_state_change(new_state):
states = ["Not running", "Starting", "Running"]
print "new state: ", states[new_state]
def on_out():
print "got out"
proc = QtCore.QProcess()
sig = QtCore.SIGNAL
proc.connect(proc, sig("started()"), started)
proc.connect(proc, sig("error(ProcessError)"), on_error)
proc.connect(proc, sig("readyReadStandardOutput()"), on_out)
proc.connect(proc, sig("stateChanged(ProcessState)"),
on_state_change)
proc.start("python sleep_loop.py")
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
widget.show()
app.exec_()
proc.close()
해결책
여기에 두 가지 문제가 있습니다.
- 다른 모든 것을 만들기 전에 Qapplication 인스턴스를 만들어야합니다.
- 자녀 프로세스는 출력을 버리고 있습니다.
고정 코드는 다음과 같습니다. 두 줄만 변경되었습니다.
app = QApplication
이전에 이사했습니다proc = QProcess
- 아동 과정에는 이제 아동 과정이 있습니다
sys.stdout.flush()
이제 모든 것이 예상대로 작동합니다.
import os, sys, textwrap
from PyQt4 import QtGui, QtCore
out_file = open("sleep_loop.py", 'w')
out_file.write(textwrap.dedent("""
import time, sys
while True:
print "sleeping..."
sys.stdout.flush()
time.sleep(1)"""))
out_file.close()
def started():
print "started"
def on_error(error):
errors = ["Failed to start", "Crashed", "Timedout", "Read error",
"Write Error", "Unknown Error"]
print "error: ", errors[error]
def on_state_change(new_state):
states = ["Not running", "Starting", "Running"]
print "new state: ", states[new_state]
def on_out():
print "got out"
app = QtGui.QApplication(sys.argv)
proc = QtCore.QProcess()
sig = QtCore.SIGNAL
proc.connect(proc, sig("started()"), started)
proc.connect(proc, sig("error(ProcessError)"), on_error)
proc.connect(proc, sig("readyReadStandardOutput()"), on_out)
proc.connect(proc, sig("stateChanged(ProcessState)"),
on_state_change)
proc.start("python sleep_loop.py")
widget = QtGui.QWidget()
widget.show()
app.exec_()
proc.close()
제휴하지 않습니다 StackOverflow