Hallo,
ich hab folgendes Szenario:
Ich bin auf Host LOCAL, es gibt einen SERVER und zwei Router A und B. Ich will nun von LOCAL aus per SSH den Routern A und B GLEICHZEITIG den Befehl senden, dass sie sich mit einem Prozess auf SERVER verbinden sollen. Dadurch starten A und B gleichzeitig eine Verbindung zu SERVER, was ich erreichen will. Ich müsste in meiem Programm dann noch warten, bis beide Verbindungen terminieren, um weiterzumachen.
Ich weiß, wie ich das in Bash machen könnte (mit & den Prozess in den einen Client im Hintergrund laufen lassen, parallel den zweiten Client laufen lassen und wenn der zweite fertig ist mittels wait pid auf den ersten warten, da die clients ja nicht zur genausten millisekunde gleichzeitig gestartet werden können). Aber ich muss es in Python machen.
Kann mir jemand helfen?
SSH-Verbindungen parallel absetzen
@snakemake: Wenn Du weisst wie es in der Shell mit ``&`` geht, dann sollte das `subprocess`-Modul doch eigentlich alles sein was Du brauchst!? Die Prozesse werden ja im Normalfall dort schon asynchron gestartet.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Dann werf ich mal `pssh` in den Raum.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
pssh geht aber davon aus, dass der Befehl, den ich parallel an alle Hosts sende, gleich ist. Aber bei mir unterscheidet sich der Befehl. Sie haben zwar immer denselben Server, aber A und B von verschiedenen WLAN-Karten und das muss ich im Befehl mit angeben.cofi hat geschrieben:Dann werf ich mal `pssh` in den Raum.
EDIT: Zumindestens habe ich die Manpage zu pssh so verstanden und nirgends eine Option gesehen, mit der man unterschiedliche Befehle parallel ausführen kann.
EDIT 2: Übrigens handelt es sich hier bei den Prozessen um Iperf-Clients.
Zuletzt geändert von snakemake am Mittwoch 16. Februar 2011, 10:24, insgesamt 2-mal geändert.
Ich weiß, so hab ich das auch zuerst implementiert, aber das sieht etwas räudig aus, wenn ich in meinem Code plötzlich mehrere Zeilen Bash-Code habe. Wenn ich dann statt zwei drei Verbindungen nehmen will, dann müsste ich gezielt den Bash Code ändern, und das ist lästig, da das Projekt, in dem sich mein Coe bfindet, nicht gerade klein ist und nicht jeder, der die Datei nutzt, Bash kann.BlackJack hat geschrieben:@snakemake: Wenn Du weisst wie es in der Shell mit ``&`` geht, dann sollte das `subprocess`-Modul doch eigentlich alles sein was Du brauchst!? Die Prozesse werden ja im Normalfall dort schon asynchron gestartet.
Also ich dachte auch an Threads. Der erste Client wird in einem neuen Thread gestartet, der zweite Client läuft normal in meinem main-Thread und wenn der fertig ist, mache ich einen join auf den ersten Thread, falls der noch nicht fertig ist.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Das haettest du erwaehnen, sollen, dass die unterschiedlich sind
`subprocess` kann das von alleine, du brauchst da keine Shell Befehle.
Mal als Anregung:
`subprocess` kann das von alleine, du brauchst da keine Shell Befehle.
Mal als Anregung:
Code: Alles auswählen
commands = [["ssh", "foo", "bar"], ["ssh", "bar", "baz"]]
procs = map(subprocess.Popen, commands)
for p in procs:
p.wait()
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
@snakemake: Du sollst ja auch keinen Bash-Quelltext in Dein Programm einbauen -- wo habe ich *das* denn vorgeschlagen?
Ich habe aus dieser Aussage verstanden, dass du sagtest, wenn ich weiß, wie es in Bash geht, dann kann ich die Bash-Befehle doch mit subprpcess absetzen... Sorry, dann hab ich das falsch verstanden.BlackJack hat geschrieben:@snakemake: Wenn Du weisst wie es in der Shell mit ``&`` geht, dann sollte das `subprocess`-Modul doch eigentlich alles sein was Du brauchst!? Die Prozesse werden ja im Normalfall dort schon asynchron gestartet.
Werde gleich mal die Idee von cofi testen
@cofi
Vielen Dank, es hat super geklappt ! Ich kriege zwar die Meldung
"ControlSocket <...> already exists, disabling multiplexing"
aber die ist harmlos, weil das eher mit einem Optimierungsversuch von ssh zu tun hat.
DANKE!
Vielen Dank, es hat super geklappt ! Ich kriege zwar die Meldung
"ControlSocket <...> already exists, disabling multiplexing"
aber die ist harmlos, weil das eher mit einem Optimierungsversuch von ssh zu tun hat.
DANKE!