我在一个正在开发的更复杂的应用程序中遇到了这个错误。我执行一个python服务器程序,并希望读取可用的第一个数据。然后关闭它。我这样做是为了从服务器验证一些设置。
我的问题归结为:
这是我写的用于显示问题的测试,当我执行它时,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 ...?它是什么?
答案 0 :(得分:0)
这是评论,但......
我找到了解决方案,python的print不会刷新stdout并在实际将数据推送到stdout之前等待一定量的数据。 sys.stdout.flush()修复了它。
希望它有所帮助。