У меня есть простое приложение PyQt5, которое запрашивает некоторый консольный ввод у пользователя, используя input()
и одновременно отображает некоторый результат в окне.
Это прекрасно работает, когда ввод поступает из консоли, но когда он поступает из канала, окно открывается, но не перерисовывается.
#!/usr/bin/env python3
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
hex = __builtins__.hex
class MyWindow(QtWidgets.QWidget):
pass
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
win = MyWindow()
win.show()
try:
ans = input("?> ")
while len(ans):
print(ans)
ans = input("?> ")
except EOFError:
pass
Это работает (ввод читается из консоли и отображается окно):
./test.py
Это не так (ввод читается из конвейера и печатается, но окно не перерисовывается):
PYTHONUNBUFFERED=1 ./input.py | ./test.py
, где input.py
:
#!/usr/bin/env python3
import time
if __name__ == '__main__':
while True:
print('hello')
time.sleep(1)