Führen Sie einen komplexen Befehl "grep" mit Python
Ich versuche zu laufen, das grep zusammengesetzter Befehl das funktioniert auch auf der cmd
grep Rec sy.log | grep e612r2246s768 | grep 2013-07 | grep -oh "'.*'" | wc -c
Aber etwas ist hier falsch, und ich kann es nicht sehen und doch:
import commands
commands.getstatus("""/bin/grep Rec /var/log/sy.log | /bin/grep e612r2246s768 | /bin/grep 2013-07 | /bin/grep -oh "'.*'" | /usr/bin/wc -c""")
Out[2]: 'ls: cannot access /bin/grep Rec /var/log/sy.log | /bin/grep e612r2246s768 | /bin/grep 2013-07 | /bin/grep -oh "\'.*\'" | /usr/bin/wc -c: No such file or directory'
Verwendung Teilprozess:
import subprocess
cmd = ["""/bin/grep Rec /var/log/sy.log | /bin/grep e612r2246s768 | /bin/grep 2013-07 | /bin/grep -oh "'.*'" | /usr/bin/wc -c"""]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
/home/www-data/gpslistener/scripts/<ipython-input-24-0881e54c5eab> in <module>()
----> 1 proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
/usr/lib/python2.7/subprocess.pyc in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags)
677 p2cread, p2cwrite,
678 c2pread, c2pwrite,
--> 679 errread, errwrite)
680
681 if mswindows:
/usr/lib/python2.7/subprocess.pyc in _execute_child(self, args, executable, preexec_fn, close_fds, cwd, env, universal_newlines, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite)
1247 if fd is not None:
1248 os.close(fd)
-> 1249 raise child_exception
1250
1251
OSError: [Errno 2] No such file or directory
PD: Die Pfade sind ok, Dank
"Deprecated ab version 2.6: Die Befehle-Modul entfernt wurde in Python 3. Verwenden Sie den subprocess-Modul statt."
InformationsquelleAutor Goku | 2013-11-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit der üblichen VORBEHALT Bezug auf shell-injection, ist der einfachste Weg, um das ausführen einer shell-pipeline ist durch die übergabe
shell=True
InformationsquelleAutor iruvar
Ok, dieser Weg war zu mir:
InformationsquelleAutor Goku