Как дочерний процесс QProcess может получать данные от родительского процесса - PullRequest
0 голосов
/ 16 апреля 2019

Hellow

Мне нужно работать с двумя разными файлами py в разных средах. Удалось запустить дочерний процесс с QProcess. но я до сих пор не знаю, как получить данные из родительского процесса.

это родительский процесс с графическим интерфейсом pytrader.py

def __init__(self):
    # super().__init__()
    QtWidgets.QMainWindow.__init__(self)
    form_class.__init__(self)
    self.setupUi(self)

    self.exeOperation = QProcess()
    self.Requirement_of_current_thread = Thread(target=self.Requirement_of_current)

 def Start_of_RLTrader(self):
             if not self.Requirement_of_current_thread.is_alive():
        if self.folderPath and self.transModelPath \
                and self.RLTraderPath3 and self.transStockCode:
            self.Requirement_of_current()
    return

 def Requirement_of_current(self):
      exeFilePath = os.path.abspath('C:/Users/netpilgrim/PycharmProjects/newTestAI/test.py')
    envPath = os.path.abspath('C:/python/envs/tensorflow_test_pyinstaller/python.exe')
    self.exeOperation.start(envPath, ['-u', exeFilePath])
    self.exeOperation.waitForStarted(-1)
    self.exeOperation.started.emit()
   self.exeOperation.setInputChannelMode(self.exeOperation.ManagedInputChannel)
    self.exeOperation.write(transData)
    self.exeOperation.waitForBytesWritten(1000)
    self.exeOperation.waitForReadyRead(100)
    self.exeOperation.closeWriteChannel()

это дочерний процесс с графическим интерфейсом, test.py

class DataTransfer(QObject):
def __init__(self):
    super().__init__()
    self.GOP = 'this is Test'
    self.process = QProcess()
    self.process.start()
    self.process.waitForStarted(-1)
    self.process2 = self.process.readAll()
    # self.process.waitForReadyRead(1000)
    if self.process2:
        self.GOP = self.process2
    self.process3 = self.process.state()

class TestWindow(QWidget, DataTransfer):
def __init__(self):
    super().__init__()
    GP = DataTransfer()
    self.var002 = str(GP.GOP)
    self.var003 = str(GP.process2)
    self.var004 = str(GP.process3)
    self.initUI()

def initUI(self):
    self.setWindowTitle('My First Application')
    self.move(300, 300)
    self.resize(400, 200)

    label001 = QLabel(self)
    label001.setText(self.var002)
    val001 = label001.font()
    val001.setPointSize(30)
    label001.setFont(val001)
    label001.setAlignment(Qt.AlignCenter)

    label002 = QLabel(self)
    label002.setText(self.var003)
    label002.move(100,100)
    val002 = label002.font()
    val002.setPointSize(20)
    label002.setFont(val002)
    label002.setAlignment(Qt.AlignCenter)

    label003 = QLabel(self)
    label003.setText(self.var004)
    label003.move(100, 150)
    val003 = label003.font()
    val003.setPointSize(20)
    label003.setFont(val003)
    label003.setAlignment(Qt.AlignCenter)

    layout = QVBoxLayout()
    layout.addWidget(label001)
    layout.addWidget(label002)
    layout.addWidget(label003)

    self.show()

когда я использую функцию input () как подпроцесс, GUI не появляется. Так как я могу перенести данные из pytrader.py в test.py?

...