import subprocess
task = subprocess.Popen("cat file.log | tail -1", shell=True, stdout=subprocess.PIPE)
data = task.stdout.read()
assert task.wait() == 0
Notez que cela ne capture pas stderr. Et si vous voulez capturer stderr aussi, vous devrez utiliser task.communicate()
; appel task.stdout.read()
y luego task.stderr.read()
peut se bloquer si le tampon pour stderr se remplit. Si vous voulez les combiner, vous devriez pouvoir utiliser 2>&1
dans le cadre de la commande shell.
Mais étant donné votre cas exact,
task = subprocess.Popen(['tail', '-1', 'file.log'], stdout=subprocess.PIPE)
data = task.stdout.read()
assert task.wait() == 0
évite de devoir utiliser le tuyau.