ich habe ein großes/kleines (Größen sind relativ) Python Problem.
Meine Ausgangssituation ist wiefolgt, ich möchte ein Ausführbare Datei unter Linux starten.
Diese befindet sich im Verzeichnis /home/rentd/services/vt2/127.0.0.1/3801 und trägt den Namen "ventrilo_svr".
Hier für nutze ich dann folgenden String/Befehl, um diese Auszuführen:
Anbei jedoch, benötige ich einen Parameter: "-f/home/rentd/services/vt2/127.0.0.1/3801/ventrilo_svr"/home/rentd/services/vt2/127.0.0.1/3801/ventrilo_svr
Der komplette Zeile lautet dementsprechend:
Wenn ich diese Zeile 1:1 in meiner /bin/bash ausführe, funktioniert es problemlos! Der Server startet korrekt und findet mit -f seine korrekten Pfade./home/rentd/services/vt2/127.0.0.1/3801/ventrilo_svr -f/home/rentd/services/vt2/127.0.0.1/3801/ventrilo_svr
Auch wenn ich diese Zeile 1:1 in mein Pythonscript einbinde (siehe Quellcode), funktioniert es.
Nun ist es so, dass die IP/Port Variablen sind.. also ersetze ich diese durch meine eigenen Vars um das Python-Programm dynamisch zu machen.
Der IP und Port erhalte ich aus der Variable l_s[4] und ls_s[5] (Tuple-Typ). Wenn ich mir diese auf die Konsole printen lasse, ist auch alles korrekt. Auch die auszuführende Zeile, welche damit erstellt wird, wird korrekt dargestellt und erzeugt. Denn wenn ich diese Zeile selbst kopiere und einfüge in meiner Shell, startet der Serverdienst erfolgreich.
Quellcode (Server startet nicht korrekt):
Code: Alles auswählen
import subprocess
ExecuteLine = "/home/rentd/services/vt2/%s/%s/ventrilo_srv -f/home/rentd/services/vt2/%s/%s/ventrilo_srv" % (str(l_s[4]),str(l_s[5]),str(l_s[4]),str(l_s[5]))
# l_s[4] = 127.0.0.1
# l_s[5] = 3801
print "ExecuteLine: "+ExecuteLine
# print Ausgabe = "/home/rentd/services/vt2/127.0.0.1/3801/ventrilo_srv -f/home/rentd/services/vt2/127.0.0.1/3801/ventrilo_srv"
proc = subprocess.Popen([ExecuteLine], shell=True, executable='/bin/bash')
Nun starte ich den Dienst selbst, über die Ausgegeben Printzeile.Der Dienst startet mit der Meldung:
Ventrilo Server - Version 2.1.2
(c)Copyright 1999-2003 Flagship Industries, Inc.
Server must have a valid name.
ERROR: Unable to read configuration data. Exiting
Es funktioniert.Ventrilo Server - Version 2.1.2
(c)Copyright 1999-2003 Flagship Industries, Inc.
20090914 12:31:55 Version = 2.1.2
20090914 12:31:55 Name = test123
Aus Spaß habe ich diese Zeile 1:1 in meinen Pythonquellcode eingebaut.
Quellcode (Server startet, statischer Code):
Code: Alles auswählen
import subprocess
ExecuteLine = "/home/rentd/services/vt2/127.0.0.1/3801/ventrilo_srv -f/home/rentd/services/vt2/127.0.0.1/3801/ventrilo_srv"
# l_s[4] = 127.0.0.1
# l_s[5] = 3801
print "ExecuteLine: "+ExecuteLine
# print Ausgabe = "/home/rentd/services/vt2/127.0.0.1/3801/ventrilo_srv -f/home/rentd/services/vt2/127.0.0.1/3801/ventrilo_srv"
proc = subprocess.Popen([ExecuteLine], shell=True, executable='/bin/bash')
Ich bin mittlerweile am Ende. Vielleicht weiss einer von euch Rat. Umwandlung der Variablen mit str() bracht auch nichts.[/quote]