Multifunktionales Kopierskript

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
Helle
User
Beiträge: 7
Registriert: Sonntag 29. Januar 2017, 12:59

Hallo liebe Pythongemeinde,

ich will gerade meine ersten Gehversuche in Python unternehmen und habe dabei auch schon eine Idee aber noch ein paar Problemchen, vielleicht könnt ihr mir ja dabei helfen. Ich will ein Skript schreiben, das auf Windows läuft und folgendes in ein lokales Zielverzeichnis kopieren kann:

* Dateien von einem versteckten Ordner im lokalen Windows Benutzerverzeichnis (Pfad "C:\Users\User_xy\.GeheimerOrdner\Unterordner1" )

Bei meinen ersten Versuchen hat das leider nicht geklappt. Ich habe hier das Phänomen, dass der Windows Ordner laut Dateistruktur im Arbeitsplatz/WinExplorer "Benutzer" heißt - wenn ich aber den Pfad einer Datei bzw. eines Ordners darin kopiere, dann heißt dieser Ordner "Users". Vermutlich liegts da dran, kennt das Problem wer bzw. weiß wie man es umgeht?

* Dateien von einem Linuxserver kopieren mit dem man sich erst verbinden muss

Wie gehe ich das an? Gibt es hier irgendeine Schnittstelle in Python die ich da bedienen kann, z.B. über das SCP Protokoll?
Gibt es auch eine Loginmöglichkeit mit anschließendem Kopieren?


* Dateien von einem angeschlossenen WindowsMobile Gerät das mit ActiveSync verbunden ist kopieren. (Pfad "Computer\Pocket_PC\\\Ordnerxy")
Hier nimmt es oft sehr kryptische Pfade wenn ich copy&paste des Pfades mache, nicht den oben genannten

Danke schon mal für eure Hilfe
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Zur ersten Frage: das Verzeichnis des aktuellen Benutzers ist in der Umgebungsvariable HOMEPATH gespeichert:

Code: Alles auswählen

import os

path = os.path.join(os.environ["HOMEPATH"], ".geheimer_ordner")
sollte alles sein, was du benoetigst. Wenn du einen *anderen* User haben moechtest, koenntest du noch ein "../Username" dazwischenschieben - denke ich. Es gibt bestimmt auch noch andere Moeglichkeiten, aber vielleicht reicht das erstmal.

Und zur zweiten Frage: es gibt das Projekt"paramiko", das musst du installieren und kannst dann SSH/SCP nutzen.

Zum dritten habe ich keinerlei Kenntnisse.
Helle
User
Beiträge: 7
Registriert: Sonntag 29. Januar 2017, 12:59

Danke, das mit dem ersten Punkt hat funktioniert, kann man nun quasi abhaken. :)

Die Möglichkeit mit "paramiko" werde ich prüfen und mich einlesen.
Gibt es sonst wirklich keine native Möglichkeit einen Login mit SSH/SCP/(S)FTP zu machen?
Helle
User
Beiträge: 7
Registriert: Sonntag 29. Januar 2017, 12:59

Ich werde es bei Gelegenheit hiermit versuchen und Rückmeldung geben:

Code: Alles auswählen

#http://pysftp.readthedocs.io/en/release_0.2.9/

import pysftp

with pysftp.Connection('hostname', username='me', password='secret') as sftp:
    with sftp.cd('public'):             # temporarily chdir to public
        sftp.put('/my/local/filename')  # upload file to public/ on remote
        sftp.get('remote_file')         # get a remote file
Das sieht zumindest mal recht einfach und übersichtlich aus..
Sirius3
User
Beiträge: 17739
Registriert: Sonntag 21. Oktober 2012, 17:20

@Helle: und was gefällt Dir jetzt an Paramicos sFTP nicht, dass Du ein weiteres Paket brauchst?
Helle
User
Beiträge: 7
Registriert: Sonntag 29. Januar 2017, 12:59

@Sirius: Ich hab nicht gesagt, dass mir Paramicos sFTP nicht gefällt. Ich hab mir beides kurz mal angeschaut und pysftp schien mir etwas einfacher zu sein - kann mich auch täuschen. Aber Paramico wäre ja auch ein weiteres Paket das ich importieren muss? Welche Vorteile hat Paramicos sFTP gegenüber pysftp?
Mir geht es rein um den Login auf den Server und dem anschließenden abziehen von Dateien/Ordnern dort, nicht mehr.
Sirius3
User
Beiträge: 17739
Registriert: Sonntag 21. Oktober 2012, 17:20

@Helle: genau darum habe ich ja gefragt. Du schienst unglücklich über weitere Pakete; und pysftp setzt auf paramiko auf. Auf den ersten Blick sah ich aber keine herausragenden Verbesserungen.
Helle
User
Beiträge: 7
Registriert: Sonntag 29. Januar 2017, 12:59

@Sirius:
Hab beides nun ausprobiert, paramico und pysftp - funktioniert beides wunderbar. Ist denke ich geschmacksache was man nun lieber will. Danke trotzdem.

Habe nun alle oben genannten Punkte umgesetzt, bis auf den Punkt mit dem ActiveSync Gerät, hier komme ich einfach nicht weiter und finde auch kein passendes Modul dafür.

Im Windows zeigt es den Pfad ganz normal wie folgt an: Computer\Pocket_PC\\\Program Files
Diesen Pfad findet das Skript aber nicht. Habe auch Computer\\Pocket_PC\\\\Program Files ohne Erfolg probiert... Dachte vielleicht mach ich mit den Slashes was falsch...

Was mich dann verwirrt ist, wenn ich den Pfad mit einem Windows Plugin kopiere das den Pfad ausliest und in die Zwischenablabge kopiert, da kommt dann folgendes bei raus:
::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\activesyncwpdenumerator#umb#2&306b293b&0&activesyncwpddevice-ab5f2fe4-d830-f1e7-d806-33298de2d8ee-#{6ac27878-a6fa-4155-ba85-f98f491d4f33}\f%7CS%7C%5C\f%7CF%7C%5CProgram%20Files%5C
Da bin ich nun etwas ratlos... :(
Daikoku
User
Beiträge: 66
Registriert: Montag 20. April 2015, 21:14

Hallo Helle,

zu WindowsMobile und ActiveSync kann ich Dir nicht wirklich weiterhelfen.

Ein Windows Exchange Server benutzt auch ActiveSync und hierfür gibt es ein Python Modul.
siehe https://github.com/solbirn/pyActiveSync.

Ob Dir das jetzt weiterhilft kann ich nicht beurteilen, aber vielleicht liefert es Dir ein paar neue Ideen.
Antworten