2012-07-30 8 views
6

Sto utilizzando Python e Envoy. Ho bisogno di cancellare tutti i file in una directory. A parte alcuni file, la directory è vuota. In un terminale sarebbe:Utilizzo di rm * (carattere jolly) in envoy: Nessun file o directory

rm /tmp/my_silly_directory/* 

senso impone che l'inviato, questo si traduce in:

r = envoy.run('rm /tmp/my_silly_directory/*') 

Tuttavia:

r.std_err -> "rm: cannot remove `/tmp/my_silly_directory/*': No such file or directory" 

Naturalmente esistono alternative all'uso inviato in questo caso, mi sto semplicemente chiedendo perché non funziona.

Eventuali indizi?

risposta

5

Su UNIX, è compito della shell interpretare i caratteri jolly come *. Se esegui un programma e passi un argomento con * direttamente nel programma (che presumibilmente è ciò che viene fatto qui), otterrai un errore come quello che stai vedendo. rm presuppone che lo * sia un nome di file e che in effetti sia possibile creare tale file.

Una soluzione potrebbe essere quella di eseguire la shell e lasciarlo eseguire il comando sul vostro conto, qualcosa come

r = envoy.run('sh -c "rm /tmp/my_silly_directory/*"') 

La shell interpreterà il * prima di richiamare rm.

+0

Sembra perfettamente corretto e probabilmente funzionerà con il sottoprocesso. Comunque, in envoy, l'unica chiamata che funziona è 'envoy.run ([[" sh "," -c "," rm/tmp/my_silly_directory/* "]])" per qualche ragione. Così tanto per un sottoprocesso più semplice;) –

+0

non è riuscito a far funzionare tutto questo con il sottoprocesso, a proposito. Lo stesso errore della domanda originale. – Nate

+0

@Nate: ['shutil.rmtree ('/ tmp/my_silly_directory /')'] (http://stackoverflow.com/questions/9106350/how-to-use-wildcards-with-envoy?lq=1#comment15551439_9109127) – jfs