from __future__ import print_function import os import subprocess import sys import threading def kill_subprocess(process): process.kill() os._exit(1) # Pass -f=none and --output-style=GNU to get only one line of output per input. cmd = subprocess.Popen( [sys.argv[1], "--obj=" + sys.argv[2], "-f=none", "--output-style=GNU"], stdout=subprocess.PIPE, stdin=subprocess.PIPE, ) watchdog = threading.Timer(20, kill_subprocess, args=[cmd]) watchdog.start() cmd.stdin.write(b"0\n") cmd.stdin.flush() print(cmd.stdout.readline()) cmd.stdin.write(b"bad\n") cmd.stdin.flush() print(cmd.stdout.readline()) watchdog.cancel()