Зачем так сложно, можно напрямую использовать sys.stdin в subprocess. Есть main.py, в которой textEdit и кнопка Start_new_process.
Есть программа widget.py, которая запускается процессом из main.py. Что-то набираете в textEdit main.py, нажимаете кнопку Start_new_process - это отображается в textEdit widget.py. Из комментариев, думаю, станет более понятно. Только поставьте свой полный путь к программе (“/home/mike/slot_py/widget.py”).
main.py # coding: utf-8
import sys, subprocess
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class MainWidget(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self,parent)
self.button = QPushButton("Start_new_process")
self.textEdit=QTextEdit()
layout = QVBoxLayout()
layout.addWidget(self.button)
layout.addWidget(self.textEdit)
self.setLayout(layout)
self.connect(self.button, SIGNAL("clicked()"), SLOT('new_process()'))
@pyqtSignature('') # новое, вместо QtCore.pyqtSlot(),
def new_process(self): # принимает аргументом строку
print 'in SLOT'
text=self.textEdit.toPlainText().toUtf8()
# запускаем процесс, stdin запущенного процесса - subprocess.PIPE
p=subprocess.Popen("/home/mike/slot_py/widget.py", shell=True, stdin=subprocess.PIPE)
# записываем text в stdin запущенного процесса
p.communicate(text)
if __name__=='__main__':
app = QApplication(sys.argv)
w =MainWidget()
w.show()
sys.exit(app.exec_())
widget.py# coding: utf-8
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class Widget(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self,parent)
self.textEdit = QTextEdit()
text=sys.stdin.read() # читаем станд. ввод
text=unicode(text, "utf-8") # преобразуем utf-8 в unicode
self.textEdit.setText(QString(text)) # text ---> self.textEdit
layout = QVBoxLayout()
layout.addWidget(self.textEdit)
self.setLayout(layout)
if __name__=='__main__':
app = QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())