hallo
ich lesen via subprocess.popen() mittels PIPE alles von stderr und stdout in eine variable. das geht sehr gut. nun aber wird der stderr von popen() auch noch auf der Bash ausgegeben, was ich aber nicht möchte. ich möchte den stderr aus meiner variable schön formatiert ausgeben...
wie kann ich das nun verhindern, dass popen() stderr auf der console ausgibt.
das py script wird auf der bash gestartet und ausgeführt.
stdout/err lesen aber nicht ausgeben
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Hast Du shell=True im Aufruf stehen?newc0mer hat geschrieben: ich lesen via subprocess.popen() mittels PIPE alles von stderr und stdout in eine variable. das geht sehr gut. nun aber wird der stderr von popen() auch noch auf der Bash ausgegeben, was ich aber nicht möchte. ich möchte den stderr aus meiner variable schön formatiert ausgeben...
ja. ohne shell=True bekomme ich nix von stdout und stderr wie ich mich errinnere.
atm mache ich es so:
atm mache ich es so:
Code: Alles auswählen
subprocess.Popen(cmd, shell=True, bufsize=0, executable=None, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
ich bekomm dann nen OSError: [
es wird also mein cmd nicht mehr als command erkannt - er möchte des zeug immer im directory, wo er grad is, ausführen.. vllt auch env path probleme?
der befehl heisst z.b. "iptables --flush" (der befehl ist korrekt und rechte stimmen)
ich sehe zwar die stdout meldung auf der bash nicht mehr (cool!) aber kann den befehl auch nicht richtig verarbeiten...
Code: Alles auswählen
Errno 2] No such file or directory
der befehl heisst z.b. "iptables --flush" (der befehl ist korrekt und rechte stimmen)
ich sehe zwar die stdout meldung auf der bash nicht mehr (cool!) aber kann den befehl auch nicht richtig verarbeiten...
Es gibt ja auch kein Programm mit dem Namen 'iptables --flush'. Das Programm heisst nur 'iptables' und '--flush' ist ein Argument. Wenn man keine Shell dazwischen schaltet, muss man das Programm und die Argumente schon getrennt übergeben, zum Beispiel als Liste.
wo muss man denn diese argumente übergeben?
edit "ok": args should be a string, or a sequence of program arguments. The program to execute is normally the first item in the args sequence
muss den noch bisserl nachgehen...
Code: Alles auswählen
class subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)¶
muss den noch bisserl nachgehen...