2017-09-15 4 views
3

Ist es möglich, den Watch-Befehl in der Shell mit Subprozess zu arbeiten?Subprozess mit 'Uhr'-Befehl

tail = subprocess.Popen("watch -n 1 'tail -n 1 /mnt/syslog/**/*.log | grep :'", shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE) 

Weil es für mich nicht funktioniert ...

+1

Haben Sie versucht, mit 'os.system (your_cmd)' Ihren Befehl auszuführen? – Aditya

+0

Was funktioniert nicht? Was ist los? – JohanL

Antwort

3

Ihr subprocess Befehl ist richtig, aber nach stdout und stderr Puffer zuweisen müssen Sie von ihnen lesen. Dies ist eine Möglichkeit, das zu tun:

1 #!/usr/env/python 
    2 
    3 import subprocess 
    4 import sys 
    5 
    6 cmd = ['watch', '-d', 'tail', '-n', '1', '/var/log/messages'] 
    7 
    8 p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    9 
10 for line in iter(lambda: p.stdout.read(1), ''): 
11  sys.stdout.write(line) 
12  sys.stdout.flush() 
13 

ich den Befehl als Liste Argument angegeben haben. So empfiehlt das Subprozessmodul dies zu tun. Dann iteriert die for-Schleife über den Puffer, liest jeweils 1 Byte und druckt sie auf dem Bildschirm. Dieser Stream wird geschlossen, sobald der Subprozess beendet oder geschlossen wurde.