2016-04-21 2 views
0

Ich habe versucht, die Listenzeit mit subprocess.call aufzurufen. Es scheint, dass es nicht funktioniert. Jeder bessere Weg, das zu tun.Anruflistenelemente im Subprozess

import os, sys 
import subprocess as sb 


files_to_remove=['*.jpg','*.txt','*.gif'] 

for item in files_to_remove: 
    try: 
     **sb.call(['rm' %s]) %item** # not working 

    except: 
     print 'no %s files in directory' %item 
+0

Was ist der Zweck des Doppelsterns in Ihrem Subprozessaufruf? –

+0

Wenn Sie kein Leerzeichen außer, das Problem wäre viel offensichtlicher, Sie brauchen auch keinen Subprozess, um dies zu tun –

+0

Schlagen Sie sich an [diese Frage und Antwort] (http: // stackoverflow. com/questions/6703668/deleting-bestimmte-files-using-python). – mshildt

Antwort

0

Keine Notwendigkeit, einen subprocess hier

import glob 
import os 

files_to_remove = ['*.jpg', '*.txt', '*.gif'] 
for files_glob in files_to_remove: 
    for filename in glob.glob(files_glob): 
     os.remove(filename) 

verwenden Wenn wir mit einem Subprozess bestehen waren (was wir nicht für diese Dateien zu entfernen), wir würden

import glob 
import subprocess 

files_to_remove=['*.jpg', '*.txt', '*.gif'] 

for files_glob in files_to_remove: 
    matches = glob.glob(files_glob) 
    if matches: 
     subprocess.check_call(['rm'] + matches) 
    else: 
     print 'no %s files in directory' % files_glob 

tun Am besten ist es nie shell=True zu verwenden.

+0

danke. Ihr erster Ansatz ist großartig. Sag, wenn ich ein Verzeichnis habe (keine Dateien). Wie kann ich glob in diesem Szenario verwenden? Im Subprocess kann ich das so machen, rm -r

kirit

+1

Sie würden "shutil importieren" und dann 'shuthil.rmtree ("/path/to/the/dir ")'. Globbing ist dort nicht angemessen - glob ist der Name, wenn die '*' Syntax in der Shell, aber in diesem Szenario haben wir keinen Pfad mit einem '*'. –

0

Es funktioniert nicht wie erwartet, weil es den Argumenten entgeht. Und die folgenden Werke:

#!/usr/bin/python 

import os, sys 
import subprocess as sb 

files_to_remove=['*.jpg','*.txt','*.gif'] 

for item in files_to_remove: 
    try: 
     sb.check_call(['rm ' + item], shell=True) 
    except sb.CalledProcessError as e: 
     print(e.output) 
    except: 
     print("unknown error") 
+0

Dank verwendet. Es funktioniert jetzt gut – kirit