
Ich schreibe eine Anwendung mit einem Server-Client-Framework. Um die Logik zu implementieren,
- Ich muss einen komprimierten Ordner auf einen Windows-Server übertragen.
- entpacken Sie den Ordner und
- Führen Sie dann eine bestimmte Python-Datei im Ordner aus.
Ich versuche, die Schritte manuell neu zu erstellen, damit ich sie dann mit Python-Bibliotheken (wie paramiko
und zipfile
oder anderen Python-Bibliotheken) wiederholen kann.
Bisher habe ich die folgenden Tests ausprobiert, um zu prüfen, ob ich ein Python-Skript zuverlässig per SSH ausführen kann:
Verwenden von OpenSSH unter Windows 10: https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH Nach einiger Konfiguration konnte ich Dateien von der Clientseite auf den Server kopieren, indem ich
scp
. Der nächste Plan war, SSH zu verwenden, um eine bestimmte Datei remote auszuführen, indem ichpython filename.py
Dann wechselte ich per CD in den Ordner und versuchte, python filename.py auszuführen. Es gab jedoch keine Ausgabe von
python
.Als nächstes habe ich MobaSSH ausprobiert und das Problem war das gleiche wie beim Test mit OpenSSH von Microsoft. `Schwerwiegender Python-Fehler: Py_Initialize: kann Sys-Standard-Streams nicht initialisieren LookupError: unbekannte Kodierung: cp28591
Aktueller Thread 0x00000874 (letzter Aufruf zuerst):`
Aufgrund der beiden oben genannten Experimente dachte ich zunächst, dass es ein Problem mit meiner Python-Installation gab. Also habe ich mich direkt bei der Maschine angemeldet und
cmd
dieselbe Datei wie ausgeführt.python filename.py
Sie wird ausgeführt und erzeugt die erwarteten Ausgaben. Python läuft also auf der Windows-Maschine einwandfrei.Meine nächste Hypothese war, dass es unmöglich ist, Python über SSH auszuführen. Um dies zu testen, habe ich mich bei meiner Ubuntu-VM angemeldet und dasselbe Experiment durchgeführt. In diesem Fall lief Python einwandfrei und ohne Fehler.
Aus diesen Experimenten geht hervor, dass ich ssh
Python nicht ausführen kann, wenn ich mich mit anmelde und versuche, es auszuführen, möglicherweise aufgrund einer Eigenart von Python oder Windows. Wenn ich jedoch direkt bei Windows angemeldet bin, kann ich dasselbe Python-Skript problemlos ausführen. Darüber hinaus scheint SSH in einer Linux-Umgebung einwandfrei zu funktionieren.
Ich muss das Python-Skript aus anderen Gründen in einer Windows-Umgebung ausführen, nicht in einer Linux-Umgebung. Obwohl das Ausführen der Testdatei in der Ubuntu-VM problemlos funktioniert hat, kann ich diese Umgebung nicht verwenden. .
Gibt es eine Möglichkeit, ein Python-Skript auszuführen, wenn man in einer Windows-Umgebung über SSH angemeldet ist?
Antwort1
Mit Folgendem hatte ich einigen Erfolg:
1. Nach dem Einloggen starten Sie cmd.exe
cmd
2.Stellen Sie eine Codepage ein, zum Beispiel 850 (innerhalb von cmd.exe)
chcp 850
3. Legen Sie den Pfad und andere Umgebungsvariablen fest (innerhalb von cmd.exe).
set PATH=c:\Python27;c:\Python27\Scripts;C:\Program Files (x86)\...
set OTHER_VAR=...
Sie können die Befehle chcp und set in eine Batchdatei einfügen, die Sie nach der Anmeldung ausführen.
Um die gewünschten Werte herauszufinden, können Sie eine lokale cmd-Shell auf dem Zielcomputer oder auf einem anderen Windows-Computer, der ähnlich genug ist, starten und Folgendes ausführen:
chcp
set
Um alle Variablen direkt in eine Datei zu schreiben, führen Sie diese auf dem Zielcomputer von einer lokalen Befehlsshell aus:
set >> myvars.cmd
Dies muss manuell bearbeitet werden, um jeder Zeile ein „Set“ voranzustellen und so ein Skript zu erstellen, das Sie nach der Remote-Anmeldung ausführen können.
Es ist sogar möglich, sich anzumelden, SSH zu starten und das Skript in einer Zeile oder in einem Bash-Skript auszuführen:
#!/bin/bash
ssh 10.1.1.100 -lwindowsuser 'cmd /K myvars.cmd'
Der Schalter /K von cmd führt den folgenden Befehl aus (ohne Beenden nach der Ausführung).