Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  3 783

Kode

#! C:\python30

import os
import time

source = ['C:\\plassering']

target_dir = 'C:\\plassering'

target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S')

zip_command = "zip -qr {0} {1}".format(target, ' '.join(source))

print(zip_command)

if os.system(zipp_command) == 0:
    print('Successful backup to ', target)
else:
    print('Error! Backup failed.')
Dette skal da være et script som tar backup av en mappe, men jeg får det ikke til å fungere, og kan ikke forstå hvorfor. Dette er jo et forholdsvis enkelt script og det irriterer meg litt at jeg ikke kan få det til. Hvis det er noen som har en løsning med en forklaring på hva jeg har gjort galt villed det vært fint.
Sist endret av adiabatic; 15. juli 2009 kl. 02:33.
m0b
m0b's Avatar
DonorAdministrator
Nå er Python ett av de språka jeg ikke kan, men jeg stusser litt på notasjonen med '. "Vanligvis" vil en streng innkapslet med ' være en litterær streng. Det vil si at den ikke tolker escape characters. \ er en escape character, og i en parset streng vil man måtte benytte seg av \\ for å kunne få fram et resultat til \. En litterær streng med 'C:\\plassering' vil derfor være en ugyldig UNC etter hva jeg kan skjønne.

Har du sjekket opp dette? Nå nevner du ikke hva du ikke får til, er det en parse error du lurer på, eller er det rett og slett ikke resultat etter at du kjører zip_command igjennom os.system funksjonen? Hva er innholdet i zip_command når du printer den? Tolket streng, eller litterær? Hvorfor har du forskjellig notasjon på source og target_dir?

Edit: Etter hva Nine spottet så burde det strengt tatt vært en parse error her ett sted som forteller deg at variabelen zipp_command ikke eksisterer. Denne feilmeldingen burde du hatt med.
Sist endret av m0b; 15. juli 2009 kl. 02:48.
if os.system(zipp_command) == 0:

skulle vel vært

if os.system(zip_command) == 0:
Svar på noen spørsmål,og gir litt info til trådstarter.

Det vil si at den ikke tolker escape characters. \ er en escape character
Vis hele sitatet...
http://pythonconquerstheuniverse.blo...re-escape.html
Hva er innholdet i zip_command når du printer den?
Vis hele sitatet...
Det brukes en standar zip command som hører til Linux/Unix.
Regner med trådstater vet at viss dette skal virke i windows må man installer GnuWin.
Legge "C:\Program Files\GnuWin32\bin" til system path.
Ts ser litt på "a byte of python" tenker jeg der brukes forfatter linux.

Du kan også bruke zipfile som er med i python.

Hvorfor har du forskjellig notasjon på source og target_dir?
Vis hele sitatet...
Source er lagd i en liste(array)for at man kan ta med flere mapper.
Eksp: source = ['C:\\plassering', C:\\test]
Man bruker senere "join" for og gjør om fra list til string.
Viser raskt dette i python IDLE.

Kode

>>> source = ['C:\\plassering', 'C:\\test']
>>> type(source)
<class 'list'>

a = ' '.join(source) #gjør om til string
>>> a
'C:\\plassering C:\\test'
>>> type(a)
<class 'str'>
parse error her ett sted som forteller deg at variabelen zipp_command ikke eksisterer
Vis hele sitatet...
Ja det kommer en klar feilmelding.
NameError: name 'zipp_command' is not defined (line 16)
Regner med TS ikke tar med dette for han er ny i python.
Tar bare et mindere eksempel der jeg lager en NameError:

Kode

>>> var1 = 5
>>> var2 = 5

>>> if varr1 == var2:
	print ('Sant')

NameError: name 'varr1' is not defined (line 4)
Da bør det være rimlig greit og skjønne hva "NameError" er.

Ellers så fungerer scripet fint det i både windows og linux.