Seite 1 von 1

Argumente an subprocess.Popen übergeben

Verfasst: Freitag 4. Juli 2008, 21:31
von studi
Hollo.

Habe in test.py folgende Funktion:

Code: Alles auswählen

def modul_1():
    modul1_ip='132.188.113.132'
    modul1_port='8889'
    modul1_name='schrauber'
    start_agent(modul1_ip, modul1_port,modul1_name)
start_agent ist im agent_main_modul2.py

Frage: Wie kann ich mit subprocess.Popen das Modul agent_main_modul2.py mit den Argumenten modul1_ip='132.188.113.132' modul1_port='8889' modul1_name='schrauber'
starten? Besser gesagt geht das überhaupt, in der Doku habe ich nichts derartieges finden können. "I do'n speak english". :lol:

Bitte um Tips.

Verfasst: Samstag 5. Juli 2008, 01:01
von ichbinsisyphos
du kannst mit subprocess externe programme öffnen. natürlich könntest du einen string mit den argumenten zusammenstellen und an subprocess übergeben (oder als liste).

aber ich glaub eher, start_agent ist eine funktion im modul agent_main_modul2.py, eh? (ein gewöhnliches python modul, oder was eigenes?)

das kannst vermutlich importieren, dann hast zugriff auf die funktionen darin.

z.B.:

Code: Alles auswählen

 import agent_main_modul2

agent_main_modul2.start_agent(arg1,arg2,arg3)
subprocess wär überhaupt nur dann möglich, wenn das "modul" diese argumente akzeptiert und an die funktion darin weitergibt.

Verfasst: Samstag 5. Juli 2008, 11:18
von studi
Ja agent_main_modul2.py ist mein eigenes Python Modul.
Nein leider geht es nicht mit einem Import, da ich mehrere Funktionen habe z.B modul_1(), modul_2() und so weiter,
die parallel und unabhängig von einander laufen müssen.
Ich versuche es mal herauszufinden wie das mit den Listen geht und melde mich dann nochmal.
Danke. :)

Verfasst: Samstag 5. Juli 2008, 12:08
von ichbinsisyphos
also ich glaub nicht, dass ich das problem hier verstehe, aber ...


du kannst mit subprocess skripte genauso aufrufen, wie du es in der kommandozeile machen würdest. alternativ, und das scheint hier sehr gut zu passen, kannst die argumente als elemente in eine liste schreiben.

Code: Alles auswählen

command = [modul1_path, modul1_ip, modul1_port, module1_name]
subprocess.Popen(command)
fragst du im module argumente von der kommandozeile ab? ich mein, es ist dein eigenes, also kein problem das zu ändern, aber ein modul ist für mich ein python skript, das zum importieren gedacht ist, also im normalfall keine argumente von der kommandozeile berücksichtigen braucht.

Verfasst: Samstag 5. Juli 2008, 14:42
von dennda
Nein leider geht es nicht mit einem Import, da ich mehrere Funktionen habe z.B modul_1(), modul_2() und so weiter,
die parallel und unabhängig von einander laufen müssen.
Da würde ich aber nicht den Umweg über subprocess gehen sondern mir die Dokumentation der Module `thread` und `threading` zu Gemüte führen.