import ctypes import subprocess import os import sys def fails(): ctypes.cdll.kernel32.FreeConsole() subprocess.call('calc', shell = True, stdout = open(os.devnull, 'w')) def works1(): subprocess.call('calc', shell = True, stdout = open(os.devnull, 'w')) def works2(): ctypes.cdll.kernel32.FreeConsole() subprocess.call('calc', shell = True) def works3(): ctypes.cdll.kernel32.FreeConsole() subprocess.call('calc', shell = True, stdin = open(os.devnull, 'r'), stdout = open(os.devnull, 'w'), stderr = open(os.devnull, 'w')) eval(sys.argv[1] + '()')