Я занимался разработкой GUI-приложения в IDA anaconda и в python 3.4 и с использованием простого тестового сценария, я думал, что он хорошо работает в пределах 3.4, отображая вывод в реальном времени и ожидая ввода. Конечной целью приложения было запустить скрипт, который я не контролирую и кодируется в версии 2.7, и отправляю команды сценария. Я преобразовал достаточно скрипта gui для работы в версии 2.7, но qprocess не работает должным образом. С помощью простого тестового сценария ничего не отображается, предполагая, что он висит в raw_input. Когда я запускаю нужный сценарий, ничего не отображается, тогда все отображается с сообщением о его выключении (возможно, функция тайм-аута не может проверить). К сожалению, я не могу опубликовать фактический скрипт, но я сварил код до этого простого тестового примера, который не работает для меня. Я думаю, что проблема не в том, что чтение сценария в режиме реального времени и процесс должным образом не ожидает ввода. Как я могу заставить это работать в 2,7?запуск скрипта в gui с qprocess работает в 3.4, не 2.7, зависающем на raw_input?
mainwindow.ui:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>562</width>
<height>608</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLineEdit" name="fileLocation"/>
</item>
<item>
<widget class="QPushButton" name="openFileButton">
<property name="text">
<string>OpenFile</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="startButton">
<property name="text">
<string>Start</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QTextBrowser" name="textBrowser"/>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>562</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
main.py:
from PyQt4 import QtCore, QtGui, uic
class MyMainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
uic.loadUi('mainwindow.ui', self)
self.openFileButton.clicked.connect(self.getFname)
self.process=QtCore.QProcess(self)
self.process.readyRead.connect(self.dataReady)
self.startButton.clicked.connect(self.startScript)
def getFname (self):
self.fileLocation.setText(QtGui.QFileDialog.getOpenFileName(self, "Save File", "", "*.py ;; All files *.*"))
def dataReady(self):
self.textBrowser.append(bytearray(self.process.readAllStandardOutput()).decode('utf-8'))
def startScript(self):
self.process.start('python',[self.fileLocation.text()])
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
main_window = MyMainWindow()
main_window.show()
sys.exit(app.exec_())
test.py кодируются питона 2.7:
print "running script 2"
print "Enter an input A,B,C:"
s=raw_input("")
print "you selected:"+s
можете ли вы опубликовать скрипт 3.4, который сработал? –
да: 'печать ("бегущая сценарий 2") печать ("Введите входной A, B, C:") S = вход ("") печати ("Вы выбрали:" + s)' – kaminsknator
может вы пытаетесь «print (« running script 2 ») print (« Введите вход A, B, C: ») s = str (ввод (« »)) print (« вы выбрали: «+ s») в вашем python 2.7 контрольная работа? –