没有输出的Python os.system

我正在运行这个:
os.system("/etc/init.d/apache2 restart")
它会重新启动Web服务器,就像我应该直接从终端运行命令一样,它会输出:
* Restarting web server apache2                                                 ...
waiting                                                             [ OK ]
但是,我不希望它在我的应用程序中实际输出它。我该如何禁用它? 谢谢!     
已邀请:
一定避免使用
os.system()
,而是使用子流程:
with open(os.devnull, 'wb') as devnull:
    subprocess.check_call(['/etc/init.d/apache2', 'restart'], stdout=devnull, stderr=subprocess.STDOUT)
这是
subprocess
subprocess
等价物。 Python 3.3+上有
subprocess.DEVNULL
#!/usr/bin/env python3
from subprocess import DEVNULL, STDOUT, check_call

check_call(['/etc/init.d/apache2', 'restart'], stdout=DEVNULL, stderr=STDOUT)
    
您应该使用
subprocess
模块,您可以灵活地控制
stdout
stderr
os.system
已弃用。
subprocess
模块允许您创建表示正在运行的外部进程的对象。你可以从它的stdout / stderr读取它,写入它的stdin,发送信号,终止它等。模块中的主要对象是
Popen
。还有许多其他方便的方法,如调用等。文档非常全面,包括一个关于替换旧函数的部分(包括
os.system
)。     
根据你的操作系统(这就是Noufal所说的,你应该使用subprocess)你可以尝试类似的东西
 os.system("/etc/init.d/apache restart > /dev/null")
或(也使错误静音)
os.system("/etc/init.d/apache restart > /dev/null 2>&1")
    
这是我几年前拼凑在一起的系统调用函数,并用于各种项目。如果您根本不想要命令的任何输出,您可以说
out = syscmd(command)
然后对
out
不做任何操作。 测试并在Python 2.7.12和3.5.2中工作。
def syscmd(cmd, encoding=''):
    """
    Runs a command on the system, waits for the command to finish, and then
    returns the text output of the command. If the command produces no text
    output, the command's return code will be returned instead.
    """
    p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT,
        close_fds=True)
    p.wait()
    output = p.stdout.read()
    if len(output) > 1:
        if encoding: return output.decode(encoding)
        else: return output
    return p.returncode
    

要回复问题请先登录注册