Früher habe ich jeden Monat eine feste Image-Datei von einem festen Server abgerufen und regelmäßig Besprechungsmaterialien erstellt. Es war mühsam, in WinSCP einzutauchen und es zu bekommen, deshalb habe ich beschlossen, es mit Python zu automatisieren.
Als ich es überprüfte, schien es, dass ich es mit paramiko und scp machen konnte, also versuchte ich es.
Ausführungsseite: Windows Server 2012 Erhalten von: CentOS Linux 7
Für mit dem Internet verbundene Terminals ist normales Pip in Ordnung
py -m pip install paramiko
Wenn Sie sich in einer Offline-Umgebung befinden, laden Sie sie einmal herunter und installieren Sie sie anschließend.
py -m pip download -d C:\tmp --no-binary :all: paramiko
Als ich den obigen Befehl eingegeben habe
ERROR: Command errored out with exit status 1:
Ich habe den Fehler erhalten und konnte ihn nicht herunterladen.
Nach einer Weile zu kämpfen
py -m pip download -d C:\tmp paramiko
Ich konnte es unter herunterladen. Die Option "--no-binary" lädt die Quelle herunter, nicht die Binärdatei Es ist etwas, das es weniger anfällig für die Umwelt macht, aber es scheint nicht gut damit zu funktionieren. Bringen Sie die heruntergeladene Datei zum Installationsziel und installieren Sie sie mit dem folgenden Befehl.
pip install --no-index --find-links=tmp paramiko
Ich war mir nicht sicher, warum ich es nicht auf die übliche Weise tun konnte, aber in meiner Umgebung funktioniert es gut mit den oben genannten.
Versuchen wir, "paramiko importieren" zu machen. Wenn Sie dies nicht können, liegt ein Problem mit der Installationsmethode vor.
Zuerst werde ich den notwendigen Code eingeben.
import paramiko
import scp
#Server-Anmeldeinformationen
host = "IP Adresse"
user = "Nutzername"
pas = "Passwort"
#Ausgabe Verzeichnis
out_path = r"C:\temp"
#Zieldateipfad
target_path = "/var/tmp/hoge.log"
#Serververbindung
with paramiko.SSHClient() as sshc:
sshc.set_missing_host_key_policy(paramiko.AutoAddPolicy())
sshc.connect(hostname=host, port=22, username=user, password=pas)
#Kopierverarbeitung durch SCP
with scp.SCPClient(sshc.get_transport()) as scpc:
scpc.get(remote_path=target_path, local_path=out_path)
Ich habe noch keine verschiedenen Dinge ausprobiert, daher verstehe ich die Details nicht, aber irgendwie.
scpc.get(remote_path=target_path, local_path=out_path)
In Bezug auf die beiden Argumente hier scheint es, dass nur der Zeichenkettentyp akzeptiert wird.
Konvertieren Sie ein praktisches * Path * -Objekt in einen String mit str ()
usw., bevor Sie es übergeben.
Übrigens, auch wenn Sie das Element nicht deklarieren
scpc.get(target_path, out_path)
Es funktioniert gut mit. Da diese Funktion jedoch andere Argumente hat, wird sie als Magie angegeben.
Ich fand es einfach und sehr einfach zu bedienen.
Unter Linux lautet der Hierarchiebegrenzer "/" anstelle von "", sodass die Kombination mit einer einfachen Zeichenfolge einfach ist.
(Natürlich kann Windows \
auch als Zeichenfolge behandelt werden.)
In meinem Fall habe ich die Zieldateiliste während des Loops wie unten gezeigt erstellt.
for day in day_list:
target_list.append(f"{port}/result{port}-{day}.png ")
Sie können Befehle auch mit paramiko
ausführen, dies wird jedoch separat zusammengefasst.
Recommended Posts