3
是否可以在shell中使用watch命令來處理子進程?使用'watch'命令的子進程
tail = subprocess.Popen("watch -n 1 'tail -n 1 /mnt/syslog/**/*.log | grep :'", shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
因爲它不爲我工作...
是否可以在shell中使用watch命令來處理子進程?使用'watch'命令的子進程
tail = subprocess.Popen("watch -n 1 'tail -n 1 /mnt/syslog/**/*.log | grep :'", shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
因爲它不爲我工作...
你的子命令是正確的,但你指定輸出和錯誤緩衝之後,你需要從他們閱讀。這是做到這一點的一種方法:
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
我已經聲明瞭該命令作爲列表參數。這是子流程模塊推薦的做法。然後for循環迭代緩衝區,一次讀取1個字節並將其打印到屏幕上。一旦子流程死亡或關閉它,此流將被關閉。
您是否嘗試過使用'os.system(your_cmd)'來運行您的命令? – Aditya
什麼不起作用?發生什麼事? – JohanL