2016-06-16 9 views
1

Ich versuche, einige Datei (von meinem Linux-Rechner), außer wenige zu entfernen:laufen bash Befehl von python3

touch INCAR KPOINTS foo bar 
$ls 
bar foo INCAR KPOINTS 
$python3 mini.py 
Job Done 
$ls 
bar foo INCAR KPOINTS 

Die mini.py ist:

#!/usr/bin/python3 
import subprocess 

subprocess.run(['rm', '-f', '!(INCAR|KPOINTS|PO*|*.sh)']) 
print("Job Done") 

Wie in der Ausgabe zu sehen von mini.py, es gibt keinen Fehler, aber weder es macht seine Arbeit.

Was mache ich hier falsch?

+0

'rm' ist keine ausführbare Datei, es ist nur ein interner Befehl von bash. Versuchen Sie 'run [' bash ',' -c ',' rm ... "]' – gdlmx

+0

das funktioniert auch nicht – BaRud

+2

'rm' ist eine ausführbare Datei in jedem vernünftigen System. Es ist Teil des GNU Coreutils-Pakets und Sie finden es in '/ bin /' oder '/ usr/bin', abhängig von Ihrer Distribution. – Munir

Antwort

4

Es funktioniert nicht, weil !() eine erweiterte Anpassungsmuster ist, und muss explizit aktiviert werden:

subprocess.run(['/bin/bash', '-O', 'extglob', '-c', 'rm -f !(INCAR|KPOINTS|PO*|*.sh)']) 

Hinweis dies das Skript selbst ...

-1

Sie auch

wird entfernen können
import os 
os.system('rm -f !(INCAR|KPOINTS|PO*|*.sh)')