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.
61 lines
1.7 KiB
61 lines
1.7 KiB
3 years ago
|
#!/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)
|