QProcess.waitForReadyRead()没有数据:非一致行为

时间:2012-02-14 14:46:21

标签: python pyqt4

我在一个正在开发的更复杂的应用程序中遇到了这个错误。我执行一个python服务器程序,并希望读取可用的第一个数据。然后关闭它。我这样做是为了从服务器验证一些设置。

我的问题归结为:

  • QProcess.waitForReadyRead()没有返回和超时,它应该很快返回True
  • 它曾经工作,我回滚到一个较旧的版本,试图找到导致这个现在破坏的原因,但它现在总是在那里,我真的尝试了我能想到的一切,所以我想知道这是否是一个正常的问题或者可能只会影响我并且由我的环境引起的事情。

这是我写的用于显示问题的测试,当我执行它时,3个首先检查立即返回数据,但最后一个超时并且我没有数据。

这当然不合逻辑。在测试中我使用wait,在我的服务器中它只是一个类似select的函数,它是用python中的基本模块实现的。

from PyQt4 import QtCore

#FILE: 1.py
#print 'TEST'

#FILE: 2.py
# import time
#print 'TEST'
#time.sleep(100)

#FILE: 1.sh
# echo 'TEST'

#FILE: 2.sh
# echo 'TEST'
# sleep 100


proc0= QtCore.QProcess()
proc0.start('sh', ['./1.sh'])
proc0.waitForStarted()
proc0.waitForReadyRead(10000)
output0 = proc0.readAll()

proc1= QtCore.QProcess()
proc1.start('sh', ['./2.sh'])
proc1.waitForStarted()
proc1.waitForReadyRead(10000)
output1 = proc1.readAll()

proc2= QtCore.QProcess()
proc2.start('python', ['./1.py'])
proc2.waitForStarted()
proc2.waitForReadyRead(10000)
output2 = proc2.readAll()

proc3= QtCore.QProcess()
proc3.start('python', ['./2.py'])
proc3.waitForStarted()
proc3.waitForReadyRead(10000)
output3 = proc3.readAll()

print "0"
print output0.size()
print repr(output0.data())
print "1"
print output1.size()
print repr(output1.data())
print "2"
print output2.size()
print repr(output2.data())
print "3"
print output3.size()
print repr(output3.data())

proc0.close()
proc1.close()
proc2.close()
proc3.close()

最后一次测试(proc3)是否应该像我描述的那样?是否有一个解决方法或修复程序,让我在我的python服务器中读取数据表单stdout ...?它是什么?

1 个答案:

答案 0 :(得分:0)

这是评论,但......

我找到了解决方案,python的print不会刷新stdout并在实际将数据推送到stdout之前等待一定量的数据。 sys.stdout.flush()修复了它。

希望它有所帮助。