Seite 1 von 1

Python Skript mit subprocess und xterm

Verfasst: Donnerstag 2. August 2018, 12:51
von rosi119
Hallo zusammen,
zu folgendem Code habe ich eine Frage.

Code: Alles auswählen

import subprocess

#def t():
    #print("Befehl t wird ausgeführt")
    #befehl = "t"
def a5():
    print("Befehl a5 wird ausgeführt")

menu = [
["Befehl1", "t"],
["Befehl2", a5]
]
def handle_menu(menu):
    #while True:
        for index, item in enumerate(menu, 1):
            print("{}  {}".format(index, item[0]))
        choice = int(input("Ihre Wahl? ")) - 1
        if 0 <= choice < len(menu):
            #print (menu[choice][1]())
            auswahl = menu[choice][1]
            procs1 = subprocess.Popen(["xterm", "-e", 'tail -f /tmp/icoms/cosyd.log'])
            procs2 = subprocess.Popen(["xterm", "-e", "nc -u localhost 28070", auswahl])
            procs1.wait()
            procs2.wait()

            print (auswahl)
        else:
            print("Bitte nur Zahlen im Bereich 1 - {} eingeben".format(len(menu)))
handle_menu(menu)
das Skript funktioniert soweit ich möchte nur noch das bei Procs2 (subprocess.Popen(["xterm", "-e", "nc -u localhost 28070", auswahl])) erst "xterm", "-e", "nc -u localhost 28070 ausgeführt wird und in dem Fenster was sich dann öffnet soll die "auswahl" ausgeführt werden.

Aktuelle Fehlermeldung: Can´t execp nc -u localhost 28070: Datei oder Verzeichnis nicht gefunden.

Kann mir jemand helfen wie ich das am besten umsetzte?

Gruß
Rosi

Re: Python Skript mit subprocess und xterm

Verfasst: Donnerstag 2. August 2018, 13:08
von __deets__
Warum soll denn da ein xterm gestartet werden? Das braucht es doch gar nicht. starte einfach direkt nc. Mal abgesehen davon, dass es nicht schwer ist, in Python einfach selbst einen UDP-Socket zu oeffnen, und die Daten da selbst abzugreifen. Und erst recht gilt das fuer das tail - du kannst doch einfach die csyd.log-Datei selbst oeffnen, und daraus lesen?

Und du kannst in in dem sich oeffnenden xterm Fenster danach auch nichts mehr ausfuehren. Erst recht keinen Python-Code.

Beschreib doch mal, was die ganze Chose eigentlich fuer ein Problem loesen soll?

Re: Python Skript mit subprocess und xterm

Verfasst: Donnerstag 2. August 2018, 13:13
von rosi119
Es gibt eine Menge befehle die man bei netcat eingeben kann und diese sollen in einem Menü zusammen gefasst werden, dadurch soll man nur noch eine Zahl eingeben und der Befehl wird ausgefürt. Dadurch wird dann die richtige Information aus dem Logfile gezogen.

Re: Python Skript mit subprocess und xterm

Verfasst: Donnerstag 2. August 2018, 13:14
von __blackjack__
@rosi119: Also mir ist aus der Frage und dem Code nicht klar was da passieren soll. `auswahl` kann mal eine Zeichenkette und mal eine Funktion sein. Das ist schon mal komisch. Und an der Stelle wo Du `auswahl` dann beim Aufruf von ``xterm`` geschrieben hast, erwartet ``xterm`` laut Dokumentation die Shell die *in* dem ``xterm`` ausgeführt werden soll. Also beispielsweise 'bash', oder 'fish', oder auch 'python'. Das beisst sich dann aber mit dem `-e`-Argument.

Re: Python Skript mit subprocess und xterm

Verfasst: Donnerstag 2. August 2018, 13:18
von rosi119
wie im Beispiel ist Befehl1 z.B. ein t und dieses t soll dann an nc übergeben werden. Das ist so konfiguriert, das dann eine Tabelle ausgegeben wird aus dem Logfile.

Also Auswahl sind immer Befehle die an nc geben werden

Re: Python Skript mit subprocess und xterm

Verfasst: Donnerstag 2. August 2018, 13:19
von __deets__
Wie gesagt, wenn man in Python programmiert, kann man auch direkt mit einem Socket arbeiten, statt da ueber netcat zu gehen. Ob das die bessere Wahl waere, haengt dann ein bisschen davon ab, was konkret denn diese netcat Befehle sind, die da verwandt werden sollen.

Und selbst wenn man nc benutzt, sehe ich noch nicht, wozu denn ein xterm gestartet wird. Wenn du direkt nc startest, kannst du von dem Popen-Objekt die Ausgabe auch direkt abgreifen, und zB weiter verarbeiten. Wenn das Sinn und Zweck von a5 sein sollte. Das ist mir immer noch unklar.

Re: Python Skript mit subprocess und xterm

Verfasst: Donnerstag 2. August 2018, 13:20
von __deets__
Kannst du mal die kompletten nc Befehlszeilen hinschreiben, die jeweils aus der Auswahl 1 und 2 erzeugt werden sollen? Also was wuerdest du selbst im Terminal eingeben?

Re: Python Skript mit subprocess und xterm

Verfasst: Donnerstag 2. August 2018, 13:22
von rosi119
Als Beispiel wenn man a5 eingibt wird z.B. der Audioverkehr ausgeben. Dadurch kann man bestimmte Teile aus dem Logfile ziehen.
xterm muss nicht extra gestartet werden, das stimmt. :P

Re: Python Skript mit subprocess und xterm

Verfasst: Donnerstag 2. August 2018, 13:23
von __deets__
Also in meiner man-page zu netcat steht nichts von einem Parameter a5, und auch nichts zu audio-Verkehr. Ich glaube da musst du noch ein bisschen weiter ausholen.

Re: Python Skript mit subprocess und xterm

Verfasst: Donnerstag 2. August 2018, 13:25
von rosi119
Sobald man folgendes eingibt nc -u localhost 28070 ist nc gestartet und dann gibt man nur noch den gewünschten Befehl ein z.B. t oder a5 hier und dann erscheint die Info aus dem Logfile.
Das sind definierte "Debug-Commands"

und um diese Commands auszuführen gibt man erst ein:

tail -f xxx.log ein

und in einem 2 Fenster :

netcat -u localhost 28070

dann erscheint eine cmd wo man die entsprechenden Befehle eingibt, danach wird dann die Information angzeigt.

Re: Python Skript mit subprocess und xterm

Verfasst: Donnerstag 2. August 2018, 13:29
von __deets__
Du musst wirklich ein bisschen besser erklaeren. Du nimmst hier sehr viel Wissen an, dass keiner von uns haben kann, weil wir dein Problem nicht kennen. So wie das klingt, verbindest du dich mit netcat mit einem SERVER irgendeiner Art, und DER versteht dann Kommandos wie t oder a5? Wenn ja, dann sind das keine Befehle von netcat, sondern Befehle von deinem Server.

Und auch da gilt: da musst du kein netcat benutzten, da kannst du auch einfach einen UDP-socket selbst in Python aufmachen, und mit socket.send("a5\n") etc direkt kommunizieren. Und dann von dem Socket die Ergebnisse lesen, oder halt aus einer log-Datei. Die dann wohl zu dem server gehoert?

Wie gesagt - sowas zu erraten ist etwas bloed. Es waere schoen, wenn du da etwas umfassender ausholst um das zu erklaeren, was da wie ineinander greift.

Re: Python Skript mit subprocess und xterm

Verfasst: Donnerstag 2. August 2018, 15:33
von __deets__
Wenn du bei deinem nc-Ansatz bleiben willst, dann musst du statt irgendwas hinter das Kommando zu schreiben mit dem nc-Prozess kommunizieren, via Standardeingabe.

Das geht auch mit subprocess:

Code: Alles auswählen

p = subprocess.Popen(["nc", ... ], stdin=subprocess.PIPE)
p.stdin.write("a5\n")
p.wait()
Aber wie gesagt, ich wuerde das eigentlich mit einem socket machen:

Code: Alles auswählen

import socket
UDP_IP = "127.0.0.1"
UDP_PORT = 28070
sock = socket.socket(socket.AF_INET, # Internet
                      socket.SOCK_DGRAM) # UDP
sock.sendto("a5\n", (UDP_IP, UDP_PORT))

Re: Python Skript mit subprocess und xterm

Verfasst: Freitag 3. August 2018, 09:41
von rosi119
@__deets__: Besten dank <3, es hat geklappt.
Mit der nc Methode.