2010-11-30 10 views
0

So habe ich diese Anwendung, das ist ziemlich kompliziert ... es kurz zu halten ist dies die wichtigsten Dinge, die Sie wissen sollten:os.popen() Variablen

file_name = raw_input("Name your file:").lower() 

os.popen(sudo tcpdump -c5 -vvv -w "file_name" host wiki or host wiki2) 

aber das scheint nicht zu funktionieren. Kann ich eine Reparatur bekommen? Danke, Pastelinux

edit1: Okay das ist, was ich habe jetzt, aber seine nicht funktioniert, werden alle Hinweise, wie zu beheben?

import subprocess, os, sys

filename = raw_input('File name:').lower

pipe = os.popen("sudo tcpdump -c5 -w", 'filename')

pipe = popen("sudo tcpdump -c5 -w", shell=True, stdout=PIPE).stdout

+2

umschließen Sie Ihr 'os.popen' Argument in Anführungszeichen. – SilentGhost

Antwort

2

Verwenden Sie keine `os.popen‘, sollten Sie das subprocess Modul verwenden.

Ich gehe davon aus diese (eine Zeichenfolge):

sudo tcpdump -c5 -vvv -w "file_name" host wiki or host wiki2 

Ihr Befehl ist.

Da müssen wir nur noch tcpdump nennen und keine Ausgabe von ihm zu erhalten, verwenden wir subprocess.call

>>> subprocess.call(your_command.split()) 

Natürlich, warum es nicht, hängt von Arbeit, was der Fehler ist, aber das ist, wie man gehen sollte, darüber. Wenn Sie die Antwort mit Ihrem Fehler aktualisieren können, kann es klar sein.

+0

der Fehler ist mehr von, erlaubt es mir die Rohdaten für "file_name" eingeben, aber es speichert es nicht tatsächlich. –

+0

Es tut. Sind Sie sicher, dass das der Fehler ist? – user225312

+0

Lassen Sie mich in das Subprozessmodul schauen. –

0

Wenn Sie neuere Versionen von Python ausführen, verwenden Sie das Unterprozessmodul.

Siehe die Ersatz Details os.popen bei:

Dort heißt es: Unter Unix os.popen2, os.popen3 und os.popen4 auch eine Sequenz wie das akzeptieren Befehl auszuführen, in diesem Fall werden Argumente ohne Shell-Intervention direkt an das Programm übergeben.

pipe = os.popen("cmd", 'r', bufsize) 
==> 
pipe = Popen("cmd", shell=True, bufsize=bufsize, stdout=PIPE).stdout 
+0

Vielen Dank, schauen Sie sich das Unterprozessmodul an –

2

Ihr Problem ist, dass Sie keine Zeichenfolge als Befehl übergeben. Fester Anruf zu popen():

os.popen('sudo tcpdump -c5 -vvv -w {0} host wiki or host wiki2'.format(file_name))