Ich will ein Programm schreiben mit dem ich auf vier Linux terminals auf einmal zugreifen kann(hab eine Debian Version mit Kernel 3.7). Später dann vielleicht das ich einfach nur eine Zahl eingebe und es erscheinen dann dementsprechend viele Terminals.
Hier ist der code:
Code: Alles auswählen
import subprocess
import sys
from PyQt4 import QtCore, QtGui
def main(argv):
app = QtGui.QApplication(argv)
mainwindow = MainWindow()
mainwindow.show()
sys.exit(app.exec_())
class MainWindow(QtGui.QMainWindow):
def __init__(self, *args):
QtGui.QMainWindow.__init__(self, *args)
self.labelHi = QtGui.QLabel("Hi Benutzer")
self.buttonTestKnopf = QtGui.QPushButton("testknopf")
#line edits
self.editLine1 = QtGui.QLineEdit()
self.editLine2 = QtGui.QLineEdit()
self.editLine3 = QtGui.QLineEdit()
self.editLine4 = QtGui.QLineEdit()
#text edits
self.editText1 = QtGui.QTextEdit()
self.editText2 = QtGui.QTextEdit()
self.editText3 = QtGui.QTextEdit()
self.editText4 = QtGui.QTextEdit()
self.setWindowTitle("Shells")
self.createLayout()
self.createconnects()
self.linuxshell()
def createLayout(self):
widgetZentral = QtGui.QWidget()
layoutZentral = QtGui.QGridLayout()
layoutZentral.addWidget(self.labelHi, 0, 0)
#line edits
layoutZentral.addWidget(self.editLine1, 1, 0)
layoutZentral.addWidget(self.editLine2, 1, 1)
layoutZentral.addWidget(self.editLine3, 3, 0)
layoutZentral.addWidget(self.editLine4, 3, 1)
#text edits
layoutZentral.addWidget(self.editText1, 2, 0)
layoutZentral.addWidget(self.editText2, 2, 1)
layoutZentral.addWidget(self.editText3, 4, 0)
layoutZentral.addWidget(self.editText4, 4, 1)
layoutZentral.addWidget(self.buttonTestKnopf, 5, 0)
widgetZentral.setLayout(layoutZentral)
self.setCentralWidget(widgetZentral)
def createconnects(self):
self.editLine1.returnPressed.connect(self.editLine1.clear, self.linuxshell())
self.editLine2.returnPressed.connect(self.editLine2.clear)
self.editLine3.returnPressed.connect(self.editLine3.clear)
self.editLine4.returnPressed.connect(self.editLine4.clear)
def linuxshell(self):
command_input = str(self.editLine1.text())
subprocess.Popen([command_input], shell=True)
command_output = subprocess.check_output(command_input)
self.editText1.setText(command_output)
if __name__ == "__main__":
main(sys.argv)
Code: Alles auswählen
Traceback (most recent call last):
File "prog.py", line 66, in <module>
main(sys.argv)
File "prog.py", line 7, in main
mainwindow = MainWindow()
File "prog.py", line 29, in __init__
self.createconnects()
File "prog.py", line 54, in createconnects
self.editLine1.returnPressed.connect(self.editLine1.clear, self.linuxshell())
File "prog.py", line 62, in linuxshell
command_output = subprocess.check_output(command_input)
File "/usr/lib/python2.7/subprocess.py", line 537, in check_output
process = Popen(stdout=PIPE, *popenargs, **kwargs)
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1259, in _execute_child
raise child_exception
OSError: [Errno 13] Permission denied

Kann mir jemand helfen? Ich dachte subprocess.Poppen würde schon allein den stdin, stdout und stderr automatisch zurückliefern, nachdem das command ausgeführt wurde. Ich habs in dem code jetzt erst mal mit einem Fenster versucht. Wenns klappt muss ich es ja einfach für die anderen replizieren. Hab das als root ausgeführt auf dem System(wegen Permission denied, hab keine Ahnung das da schief läuft).
Gruß