In the past I've always used the subprocess
module for this. It provides a good api for communicating with subprocesses.
You can use call(*popenargs, **kwargs)
for blocking execution of them, and I believe using the Popen
class can handle async execution.
Check out the docs for more info.
As far as using os.fork
vs pty.fork
, both are highly platform dependent, and neither will work (or at least is tested) with windows. The pty
module seems to be the more constrained of the two by reading the docs. The main difference being the pseudo terminal aspect. So if you aren't willing to architect your code in such a way as to be able to use the subprocess
module, I'd probably go with os.fork
instead of pty.fork
.