2012-12-05 20 views
5

Ho scoperto casualmente che non posso cambiare la directory attuale da un codice python. My Test-programma è il seguente:cambia directory con python

from os import system 

def sh(script): 
    system("bash -c '%s'" % script) 

sh("cd /home") 
sh("pwd") 

L'uscita del pwd non è /home, ma la directory in cui il codice sopra la vita.

Qualcuno può spiegare perché questo accade?

+0

si dovrebbe usare os.chdir(), invece. –

risposta

6

Il problema è che si esegue comandi di shell in realtà invece di cambiare la directory utilizzando os.chdir()

Ogni os.system() chiamata esegue il comando data in una nuova shell - così directory di lavoro dello script non è interessato a tutti.

5

La directory in realtà viene modificata, ma in un altro processo, figlio dello script. C'è una regola semplice da ricordare: un bambino non può mai influenzare l'ambiente (PERCORSO, CWD, ecc.) Del suo genitore.

+0

Questo ha senso. Grazie! – Tengis

3
sh("cd /home") 
sh("pwd") 

^questo depone le uova 2 gusci separati, provare:

sh("cd /home; pwd") 
1

Ogni sh() chiamata sta generando una shell diversa, in modo che si sta interessando directory di lavoro della shell, non pitone di. Per cambiare la directory di lavoro dei pitoni, utilizzare chdir()

2

Quando si esegue la funzione sh, si genera un nuovo processo di bash che quindi modifica la directory corrente ed esce. Quindi si genera un nuovo processo che non sa nulla di quello che è successo al primo processo di bash. La sua directory corrente è, di nuovo, impostata sulla home directory dell'utente corrente.
Per cambiare processo Python directory corrente usare

os.chdir("blah")` 
Problemi correlati