Python os.system without the output
Avoid os.system()
by all means, and use subprocess instead:
with open(os.devnull, 'wb') as devnull: subprocess.check_call(['/etc/init.d/apache2', 'restart'], stdout=devnull, stderr=subprocess.STDOUT)
This is the subprocess
equivalent of the /etc/init.d/apache2 restart &> /dev/null
.
There is subprocess.DEVNULL
on Python 3.3+:
#!/usr/bin/env python3from subprocess import DEVNULL, STDOUT, check_callcheck_call(['/etc/init.d/apache2', 'restart'], stdout=DEVNULL, stderr=STDOUT)
Depending on your OS (and that's why as Noufal said, you should use subprocess instead) you can try something like
os.system("/etc/init.d/apache restart > /dev/null")
or (to mute also the error)
os.system("/etc/init.d/apache restart > /dev/null 2>&1")
You should use the subprocess
module using which you can control the stdout
and stderr
in a flexible fashion. os.system
is deprecated.
The subprocess
module allows you to create an object which represents a running external process. You can read it from it's stdout/stderr, write to it's stdin, send it signals, terminate it etc. The main object in the module is Popen
. There are a bunch of other convenience methods like call etc. The docs are very comprehensive and include a section on replacing the older functions (including os.system
).