You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

60 lines
1.7 KiB

#!/usr/bin/env python
import sys
import subprocess
from io import RawIOBase
class StreamFilter(RawIOBase):
def __init__(self, conds, stream):
super().__init__()
self.conds = conds
self.stream = stream
def readinto(self, _):
pass
def write(self, msg):
if all(cond(msg) for cond in self.conds):
self.stream.write(msg)
else:
pass
class CleanLog(object):
def __init__(self, filter_, stream_name):
self.filter = filter_
self.stream_name = stream_name
self.old_stream = getattr(sys, stream_name)
def __enter__(self):
setattr(sys, self.stream_name, self.filter)
def __exit__(self, exc_type, exc_value, traceback):
setattr(sys, self.stream_name, self.old_stream)
if __name__ == '__main__':
if len(sys.argv) < 2:
raise TypeError("请指定需要运行的脚本!")
tar_file = sys.argv[1]
gdal_filter = StreamFilter([
lambda msg: "Sum of Photometric type-related color channels and ExtraSamples doesn't match SamplesPerPixel." not in msg
], sys.stdout)
with CleanLog(gdal_filter, 'stdout'):
proc = subprocess.Popen(
["python", tar_file],
stderr=subprocess.STDOUT,
stdout=subprocess.PIPE,
text=True)
while True:
try:
out_line = proc.stdout.readline()
if out_line == '' and proc.poll() is not None:
break
if out_line:
print(out_line, end='')
except KeyboardInterrupt:
import signal
proc.send_signal(signal.SIGINT)