【发布时间】:2023-05-10 07:42:01
【问题描述】:
我正在尝试使用 PyQt5 QProcess 类从子进程获取标准输出输出。如果我使用 waitForFinished(),QMainWindow 将被冻结。但是信号 readyReadStandardOutput 不起作用,尽管进程已启动。这是我的代码:
startup.py
from PyQt5.QtCore import QDir, QObject, QProcess
import settings_store
import os.path
import sys
class Getter(QObject):
process = QProcess()
output = ''
def __init__(self):
super().__init__()
self.process.setProcessChannelMode(QProcess.MergedChannels)
self.process.readyReadStandardOutput.connect(self.ready)
def start(self):
templates_folder = QDir(templates_path())
for template in templates_folder.entryList(['*.py'], QDir.Files):
self.process.start(sys.executable, [file_(template), 'on_startup'])
def ready(self):
self.output = bytes(self.process.readAllStandardOutput()).decode('UTF-8').strip()
print(self.output, 'yeah')
# constants
def templates_path():
return os.path.join(settings_store.settings_path(), settings_store.directory(), 'templates')
def file_(template):
return os.path.join(templates_path(), template)
greetings_template.py - 模板文件夹中的文件
import sys
import time
def on_startup():
print('Can we wait a bit?')
time.sleep(5)
count = 0
while count < 5:
time.sleep(1)
print("waiting now too")
count += 1
print('jeff.find_reagent hello')
if sys.argv[1] == 'on_startup':
on_startup()
【问题讨论】:
标签: python pyqt pyqt5 qprocess