The only 'more control' that os.spawn gives you over subprocess is the mode argument - but on Unix, this can only control whether the call blocks waiting for the subprocess to finish, which is also doable with subprocess.
In any case, the best way to turn your command into a list of arguments is to use the shlex.split function, as recommended by the subprocess docs:
command = 'sudo start service/new_sevice db=tmp' subprocess.call(shlex.split(command))
If you really want to use os.spawn* family (and you probably don't), you can also use shlex.split - it gives its result in the form subprocess expects which differs slightly from the form os.spawn* expect, but you can get around this easily enough using the spawnl* variants and Python's argument unpacking:
os.spawnlp(os.P_WAIT, *shlex.split(command))
subprocessfor this? Your statement of "More control" is based on what exactly? Thesubprocessmodule is developed specifically for the needs you require, and the command you detailed in your question is a perfectly normal command to run withsubprocess.subprocess.Popen('sudo start service/new_service db=tmp', shell=True, stderr=subprocess.STDOUT)However even after the child process gets terminated, the calling process dont get terminated.