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
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)
|
|
|