서브 프로세스가 멈출 수 있도록 입력을 작성해야하는 PyQt5 앱이 있습니다.왜 파이썬 Subprocess.stdin.write() kill PyQt Gui
그러나 입력 버튼이 하위 프로세스 버튼을 먼저 사용하지 않고 사용되면 Mainwindow
도 죽입니다.
먼저 하위 프로세스 버튼을 사용하고 self.bob.stdin.write("b")
응용 프로그램과 함께 입력 버튼을 사용하는 경우 하위 버튼 self.bob.stdin.write("b")
을 누르지 않고 입력 버튼을 먼저 누르면 내 응용 프로그램과 Mainwindow가 종료됩니다.
그렇다면 self.bob.stdin.write("b")
은 왜 앱을 종료합니까? 먼저 입력 버튼을 누르면 내 MainWindow가 종료되는 것을 어떻게 막을 수 있습니까?
이 테스트 코드에서 딜레마를 볼 수 있습니다. 모든 코드를 이해하지 않고
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(308, 156)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.Button_2 = QtWidgets.QPushButton(self.centralwidget)
self.Button_2.setGeometry(QtCore.QRect(20, 40, 121, 71))
self.Button_2.setObjectName("subprocessButton_2")
self.Button_1 = QtWidgets.QPushButton(self.centralwidget)
self.Button_1.setGeometry(QtCore.QRect(170, 40, 121, 71))
self.Button_1.setObjectName("inputbutton")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
self.Button_2.setText(_translate("MainWindow", "subprocess"))
self.Button_1.setText(_translate("MainWindow", "input"))
self.Button_2.clicked.connect(self.sub)
self.Button_1.clicked.connect(self.input)
def sub(self):
import subprocess
from subprocess import Popen, PIPE
from subprocess import Popen, PIPE
self.bob = subprocess.Popen('cmd ',stdin=PIPE, shell=True)
def input(self):
self.bob.stdin.write("q")
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
문제를 보여주기 위해 필요한 최소한의 코드로 코드를 줄일 수 있습니까? 이렇게하면 문제를 쉽게 찾을 수 있습니다. –
제거 된 몇 줄, 앱 생성을위한 최소값 및 두 개의 푸시 버튼 기능 왼쪽 버튼을 누른 다음 오른쪽 버튼을 누른 다음 해당 버튼을 누르면됩니다. 그러나 먼저 왼쪽 키를 누르면 GUI가 –