Probleme mit subprocess und asynchroner Kommunikation

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
defiance
User
Beiträge: 6
Registriert: Montag 21. April 2008, 02:29

Hallo,

nach einigem googlen und lesen hier im Forum komme ich derzeit nicht mehr weiter. Ich möchte ein Programm (OpenVPN) als subprocess starten. Zu Beginn erwartet es jedoch Eingaben (Username, Passwort). Die meisten Beispiele die ich gesehen habe beziehen sich darauf, das ich einen Prozess starte und am Ende eine Ausgabe erhalte. Ich möchte jedoch den Programm starten und mit diesem Kommunizieren, habe also eine asynchrone Kommunikation.
Das beste was ich zu dieser Thematik gefunden habe ist http://aspn.activestate.com/ASPN/Cookbo ... ipe/440554 Allerdings ist dieses Beispiel u.a. Plattform unabhängig (meines muss nur auf Debian - Linux laufen) was den Code aufbläht und die verständlichkeit für einen Python Anfänger wie mich wesentlich herabsetzt.

Ich habe das Skript jedoch mitlerweile zum laufen bekommen und das Beispiel so abgewandelt, dass es meine Befehle ausführen soll.

Jedoch wird das Programm nicht ausgeführt, da ich auf Serverseite keine Infos zur Authentifizierung erhalte. Auf Clientseite erhalte ich keine Ausgaben.
Wenn ich das ganze anstatt mit dem direkten Pfad zu OpenVPn. mit dem starten des Daemons probiere ('/etc/init.d/openvpn start'), erhalte ich die Meldung, als ob ich falsche Parameter übergeben hätte, was für mich darauf hindeutet, das er die verschiedenen Eingaben konkateniert.

Hat jemand eine Idee oder einen Ansatz, wie ich das Problem lösen könnte, sei es mit oben genannten Skript oder auch auf eine ganz andere Weise?

Im Code rufe ich das Programm 2 mal auf, da der erste Aufruf im shell, commands ... eh nicht ausgeführt wird, sondern nur zum starten der Shell dient.

Code: Alles auswählen

if __name__ == '__main__':
    shell, commands, tail = ('sh', ('/usr/sbin/openvpn --config /etc/openvpn/client.conf'), '\n')
   a.send ('/usr/sbin/openvpn --config /etc/openvpn/client.conf')
    a = Popen(shell, stdin=PIPE, stdout=PIPE)
    print recv_some(a),
    a.send('Username\r')
    recv_some(a),
    a.send('Passwort\r'
    recv_some(a),
[/code]
Zuletzt geändert von defiance am Montag 21. April 2008, 08:43, insgesamt 1-mal geändert.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Antworten