Datei über cmd kopieren?

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
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

Hallo liebe Community,
ich wollte gerne mit Python eine Datei über cmd an einen anderen Ort kopieren.
Ich hab es mit "os.system" versucht, aber damit kann man immer nur einen Befehl ausführen. Ich muss aber mehrere Befehle hintereinander absetzten, wie in ein Verzeichnis wechseln, prüfen ob Datei vorhanden ist und Datei kopieren...
Wisst ihr wie man das machen kann?

Mit freundlichen Grüßen
Schaf220
Zuletzt geändert von Schaf220 am Montag 19. Juli 2010, 11:40, insgesamt 1-mal geändert.
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Hallo,

eigentlich kannst du einfach mehrere Aufrufe von os.system() nacheinander machen. Allgemein sollte man statt os.system() aber Methoden aus dem subprocess-Modul verwenden (da kannst du dann auch die Rückgabe der genutzten Befehle lesen). Konkret sollte man dein Anliegen aber mit Python-Mitteln implementieren und auf die Verwendung von Shell-Befehlen gänzlich verzichten. Python hat alles an Bord, was du da beschrieben hast - die Verwendung externer Tools führt nur zu Fehlern und macht die Portierung deines Skripts unnötig schwer.

Schönen Gruß,

brb
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

Wie kann man denn mehrere Befehle an "os.system" übergeben? Ich möchte jetzt zum Beipiel das Verzeichnis wechseln mit os.system("cd C:\Users\User\Desktop") und mir danach anzeigen lassen was alles in dem Verzeichnis liegt mit "dir".

Code: Alles auswählen

import os 
test = os.system("cd C:\Users\HansPeter\Desktop")
test = os.system("dir")
Jetzt zeigt er nur das Verzeichnis an in dem sich meine Pythondatei befindet.
Benutzeravatar
Whitie
User
Beiträge: 216
Registriert: Sonntag 4. Juni 2006, 12:39
Wohnort: Schulzendorf

Wie wäre es mit

Code: Alles auswählen

import os
print os.listdir(r'C:\Users\HansPeter\Desktop')
?
Gruß
Whitie
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Schaf220 hat geschrieben:Wie kann man denn mehrere Befehle an "os.system" übergeben? Ich möchte jetzt zum Beipiel das Verzeichnis wechseln mit os.system("cd C:\Users\User\Desktop") und mir danach anzeigen lassen was alles in dem Verzeichnis liegt mit "dir".

Code: Alles auswählen

import os 
test = os.system("cd C:\Users\HansPeter\Desktop")
test = os.system("dir")
Jetzt zeigt er nur das Verzeichnis an in dem sich meine Pythondatei befindet.
So beispielsweise:

Code: Alles auswählen

os.system("pwd;cd ..;pwd")
/home/BENUTZER
/home
Aber wie gesagt: Lass es einfach - das führt nur zu *riesigem* Chaos, schlecht wartbarem Code und verringertem Supportwillen der Forenmitglieder hier ;). Alles was du brauchst ist in os und shutil zu finden!
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

Danke Whitie,
aber damit ist leider das eigentliche Problem umgangen worden. Ich kann möchte vieleicht ja auch noch andere Befehle anhängen, oder zum Beispiel die Ausgabe von "dir" weiter verwenden.

Mit freundlichen Grüßen
Schaf220
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Schaf220 hat geschrieben:Danke Whitie,
aber damit ist leider das eigentliche Problem umgangen worden.
*waaaaah*. Genau falsch: Du umgehst die eigentliche Lösung. Was immer du da gerade machst: Es ist mit an Sicherheit grenzender Wahrscheinlichkeit Unfug. Wiiiiirklich!

Du möchtest in ein Verzeichnis wechseln, überprüfen, ob eine Datei existiert und diese kopieren? Das geht mit Python deutlich einfacher, als du es vor hast:

Code: Alles auswählen

import os
import shutil

datei = "/home/benutzer/datei"
ziel_datei = "%s_222" % datei
if os.path.exists(datei):
    shutil.copy(datei, ziel_datei)
Und wenn du es schon unbedingt umständlich machen möchtest: Ich habe dir doch oben schon "subprocess" empfohlen. Hast du dir das mal angeschaut? Unten auf der Seite gibt es doch dutzende Beispiele
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@Schaf220: Das Modul os kann abgesehen davon viel mehr als os.system. ich bin mir sehr sicher, dass es auch Funktionen zur Auflistung aller Dateien gibt. Klarer Vorteil: Die bleibst innerhalb des Python-Interpreters und kannst Fehler etc. viel besser abfangen. Außerdem erhältst du als Ausgabe immer ein Python-Objekt (Liste, Tuple...), mit der du viel besser weiterarbeiten kannst als mit einem Rückgabewert von der Kommandozeile.

Gruß, noisefloor
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

Danke schön für eure Hilfe!
Antworten