
Versatile utility function to run external processes from Python, with many features: * runs an external process and waits for it to finish * does not deadlock, no matter the process stdout/stderr output behaviour * returns the exit code, stdout, stderr (separately, both as bytestrings), and the total process runtime as a dictionary * process can run in a custom environment, either as a modification of the current environment or in a new environment from scratch * stdin can be fed to the process, the returned dictionary contains information how much was read by the process * stdout and stderr is printed by default, can be disabled * stdout and stderr can be passed to any arbitrary function for live processing (separately, both as unicode strings) * optionally enforces a time limit on the process