是否可以在shell中获取watch命令以使用子进程?
tail = subprocess.Popen("watch -n 1 'tail -n 1 /mnt/syslog/**/*.log | grep :'", shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
因为它对我不起作用......
答案 0 :(得分:3)
您的subprocess命令是正确的,但在分配stdout和stderr缓冲区后,您需要从中读取它们。这是一种方法:
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个字节并将其打印到屏幕上。一旦子进程终止或关闭它,该流将被关闭。