start = time.time()
total_read = 0
-buf = " "
-while len(buf):
- now = time.time()
- to_read = max(int(rate * (now - start) - total_read), 1)
- max_buf_size = 1 * MB
- to_read = min(to_read, max_buf_size)
-
- read_start = time.time()
- buf = sys.stdin.buffer.read(to_read)
-
- write_start = read_end = time.time()
- sys.stdout.buffer.write(buf)
- write_end = time.time()
-
- wait_time = max(read_end - read_start, write_end - write_start)
- start += wait_time # exclude delay of the slowest
- total_read += len(buf)
+sys.stderr.close() # remove error message, for Ctrl+C
+
+try:
+ buf = " "
+ while len(buf):
+ now = time.time()
+ to_read = max(int(rate * (now - start) - total_read), 1)
+ max_buf_size = 1 * MB
+ to_read = min(to_read, max_buf_size)
+
+ read_start = time.time()
+ buf = sys.stdin.buffer.read(to_read)
+
+ write_start = read_end = time.time()
+ sys.stdout.buffer.write(buf)
+ write_end = time.time()
+
+ wait_time = max(read_end - read_start, write_end - write_start)
+ start += wait_time # exclude delay of the slowest
+ total_read += len(buf)
+
+except (KeyboardInterrupt, BrokenPipeError) as e:
+ pass