123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #!/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)
|