Es gibt viele Möglichkeiten, Linux-Befehle aus Python zu verarbeiten. Am besten verwenden Sie jedoch die Popen-Klasse, die die Standardausgabe und die Standardfehlerausgabe strukturell verarbeiten kann.
Funktionsname | Einstufung | Schimmel |
---|---|---|
Popen().stdout.readline() | Standardausgabe Vom Ergebnis wird nur eine Zeile ausgegeben | str |
Popen().stdout.readlines() | Standardausgabe Alle Ergebnisse als Array ausgeben | list[str] |
Popen().stderr.readline() | Standardfehlerausgabe Vom Ergebnis wird nur eine Zeile ausgegeben | str |
Popen().stderr.readlines() | Standardfehlerausgabe Alle Ergebnisse als Array ausgeben | list[str] |
output.py
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from subprocess import PIPE, Popen
def cmdline(command):
"""
Führen Sie einen Befehl aus. Schale=Wenn True, führen Sie die Shell aus.
:param command: str
:return: Popen
"""
return Popen(
args=command,
stdout=PIPE,
stderr=PIPE,
shell=True
)
#Standardausgabe
print 'Standardausgabe:' + cmdline('date').stdout.readline()
#Standardfehlerausgabe
print 'Standardfehlerausgabe: ' + cmdline('echo 2015|xargs wc -l').stderr.readline()
Ausführungsergebnis
>>> python output.py
Standardausgabe:Montag, 7. Dezember 2015, 18:47:09 Uhr JST
Standardfehlerausgabe: wc: 2015: open: No such file or directory
git.py
#Drucken Sie den neuesten Commit-Hash von Git
print cmdline('git log --oneline').stdout.readline()
#Drucken Sie den neuesten Commit-Hash aus einem anderen Repository
print cmdline('cd ~/pypi/cf_recommender/ && git log --oneline').stdout.readline()
Ausführungsergebnis
>>> python git.py
6a2ae0a xlsx update by automatic
a2febc4 update readme
chat.py
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from subprocess import PIPE, Popen
def cmdline(command):
"""
Führen Sie einen Befehl aus
:param command: str
:return: Popen
"""
return Popen(
args=command,
stdout=PIPE,
stderr=PIPE,
shell=True
)
def chat(message):
#Dummy-Montage
print 'ERROR:' + message
#Benachrichtigen Sie den Fehlerinhalt per Chat, wenn ein Standardfehler ausgegeben wird
cmd = [
'python manage.py test_json',
'python manage.py test_battle',
]
#Befehlsausführungspräfix, &&Verketten Sie mehrere Befehle mit
prefix = 'cd ~/application/ && {}'
for _cmd in cmd:
command = prefix.format(_cmd)
p = cmdline(command)
print 'command:' + command
#Benachrichtigen Sie per Chat, wenn eine Standardfehlerausgabe vorhanden ist
errors = p.stderr.readlines()
if errors:
error_message = ''.join(errors)
chat(error_message)
Ausführungsergebnis
command:cd ~/application/ && python manage.py test_json
ERROR:Traceback (most recent call last):
File "manage.py", line 10, in <module>
...
IOError: [Errno 2] No such file or directory: u'..../test.json'
command:cd ~/application/ && python manage.py test_battle
Ich bin sicher, es gibt Leute, die bequemere Wege kennen (・ ㅂ ・) و
Recommended Posts