Läuft ein linux-Befehl von python
Muss ich laufen, mit diesem linux-Befehl von python und weisen Sie die Ausgabe in eine variable.
ps -ef | grep rtptransmit | grep -v grep
Ich habe versucht, mit pythons Befehle Bibliothek, dies zu tun.
import commands
a = commands.getoutput('ps -ef | grep rtptransmit | grep -v grep')
Aber wird das Ende abgeschnitten. Die Ausgabe die ich bekomme, ist:
'nvr 20714 20711 0 10:39 ? 00:00:00 /opt/americandynamics/venvr/bin/rtptransmit setup_req db=media camera=6 stream=video substream=1 client_a'
aber die erwartete Ausgabe ist:
nvr 20714 20711 0 10:39 ? 00:00:00 /opt/americandynamics/venvr/bin/rtptransmit setup_req db=media camera=6 stream=video substream=1 client_address=192.168.200.179 client_rtp_port=6970 override_lockout=1 clienttype=1
Wer weiß, wie zu stoppen die Ausgabe von immer abgeschnitten werden oder kann jeder jeden schlagen eine andere Methode?
Du musst angemeldet sein, um einen Kommentar abzugeben.
ps
offenbar Grenzen, deren Ausgang passen in die vermeintliche Breite des Terminals. Sie können dies überschreiben, Breite$COLUMNS
environment-variable oder mit der--columns
optionps
.Den
commands
Modul ist veraltet. Verwendensubprocess
die Ausgabeps -ef
und filtern Sie die Ausgabe in Python. Verwenden Sie nichtshell=True
wie vorgeschlagen, die von anderen beantwortet, es ist einfach überflüssig in diesem Fall:Können Sie auch wollen, um einen Blick zu nehmen, die
pgrep
Befehl können Sie durch die direkt-Suche für bestimmte Prozesse.Normalerweise verwende ich
subprocess
zum ausführen eines externen Kommandos. Für Ihren Fall, Sie können etwas tun, wie die folgendenWird die Ausgabe in
out
variable.grep
undshell=True
.shell
ist erforderlich, wenn Sie möchten, verwenden Sie die Pfeife in den Befehl. Über diegrep
ich eigentlich nur kopiert und eingefügt den Befehl, die aus der Frage. Das zweitegrep
ich vermute, ist es, weil manchmal diegrep
Befehl, den wir ausführen, erscheint auch grep-ed und müssen daher entfernt werden. Diese tatsächlich vermieden werden können, mitgrep [r]tptransmit
shell=True
ist erforderlich, um mit einem Rohr in der Kommandozeile, und dass die zweitegrep
ist das entfernen der erstengrep
Befehl aus der gefilterten Liste fest. Aber beide, die Leitung und dengrep
sind überflüssig in diesem Fall.$COLUMNS
ist implizit gesetzt dannps
ignoriert, z.B., der output (in der shell) ist mehr alsshutil.get_terminal_size()
undos.environ['COLUMNS']
wirft KeyError aberecho $COLUMNS
entsprichtshutil.get_terminal_size()
.commands
veraltet ist, sollten Sie es nicht verwenden. Verwendensubprocess
stattgrep
undshell=True
.ps
Ausgabe. Aber das widerspricht nicht meinen Standpunkt...shell=True
shell pipes nicht funktionieren, also Sie falsch zu.ps
, von einem schlechten zu einem guten. Aber die Ausgabe wird abgeschnitten, wenn dieps
Spaltenbreite wird nicht gesetzt und das ist der Punkt, der Frage und Antwort. So, mit dem argument, dass die Verwendung von shell und Rohre ist nicht nötig, ist einfach nur albern, weil es ist nicht der Punkt.Einer der oben genannten Skript wird für Sie arbeiten 🙂