2017-01-16 2 views
1

Ich mache im Grunde etwas entlang der Linien von dieser:Gibt es potenzielle Probleme beim Ausführen von 'ls' als Service?

@get_request("/index.html") 
def server(): 
     return os.system("ls") 

Ich frage mich, ob es mögliche Probleme, die, wenn dies zu tun entstehen könnten. Entspricht das der Verwendung von glob?

+1

warum möchten Sie das tun? es ist langsamer als python 'os.listdir()' oder 'glob.glob()' und weniger portabel. Können Sie erklären? –

+0

Möchten Sie Ausgabe als HTML-Liste oder Tabelle formatiert? – tdelaney

+0

Warum ist es langsamer? Erstellt 'os.listdir' nicht auch einen Child-Prozess? –

Antwort

1

Dieser Code:

def server(): 
     return os.system("ls") 

Nur gibt 0 als Ergebnis, wenn das aktuelle Verzeichnis gültig ist. Es ist nicht entspricht:

def server(): 
     return os.listdir(os.curdir) 

oder

def server(): 
     return glob.glob("*") 

, die sowohl den Inhalt des aktuellen Verzeichnisses als list

Also keine Sicherheit/Sicherheitsfragen zurückkommen würde, da Befehl hartcodiert ist , aber dieser ls Service ist nutzlos. Vielleicht meinen Sie:

def server(): 
     return subprocess.check_output("ls").splitlines() 

, die ein wenig mehr Sinn macht ... Aber ich sehe noch nicht den Punkt ein Kind Prozess des Aufruf langsamer (und in eine weniger tragbaren Art und Weise) auszuführen, was Python erreichen kann nativ.

+0

Ein Unterschied besteht darin, wie die Ausgabe formatiert ist. Ihre Beispiele würden am Ende wie Python-Listen aussehen, aber vielleicht möchte OP Textausgaben im Stil von "ls". Dennoch, Ihre Beispiele mit ein wenig String-Formatierung scheint bei weitem der beste Weg. – tdelaney

+0

Wenn 'ls' ohne Optionen an ein nicht interaktives Terminal übergeben wird, befinden sich alle Dateien in einer einzigen Zeile (wie '-C1'-Option) –

+0

Ich dachte' return' \ n'.join (os.listdir (os. curdir)) 'oder vielleicht' return '
' .join (os.listdir (os.curdir)) '. – tdelaney

Verwandte Themen