首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不带输出的Python os.system

不带输出的Python os.system
EN

Stack Overflow用户
提问于 2011-04-08 22:55:27
回答 5查看 68.3K关注 0票数 29

我正在运行这个:

代码语言:javascript
复制
os.system("/etc/init.d/apache2 restart")

它会重新启动run服务器,就像我直接从终端运行命令一样,输出如下:

* Restarting web server apache2 ... waiting [ OK ]

然而,我不希望它在我的应用程序中实际输出它。如何将其禁用?谢谢!

EN

回答 5

Stack Overflow用户

发布于 2011-04-08 23:06:24

一定要避免使用os.system(),改用子进程:

代码语言:javascript
复制
with open(os.devnull, 'wb') as devnull:
    subprocess.check_call(['/etc/init.d/apache2', 'restart'], stdout=devnull, stderr=subprocess.STDOUT)

这是/etc/init.d/apache2 restart &> /dev/nullsubprocess等效项。

有一个subprocess.DEVNULL on Python 3.3+

代码语言:javascript
复制
#!/usr/bin/env python3
from subprocess import DEVNULL, STDOUT, check_call

check_call(['/etc/init.d/apache2', 'restart'], stdout=DEVNULL, stderr=STDOUT)
票数 47
EN

Stack Overflow用户

发布于 2011-04-08 23:05:31

根据您的操作系统(这就是为什么如Noufal所说,您应该改用子进程),您可以尝试如下所示

代码语言:javascript
复制
 os.system("/etc/init.d/apache restart > /dev/null")

或者(也可以静音错误)

代码语言:javascript
复制
os.system("/etc/init.d/apache restart > /dev/null 2>&1")
票数 29
EN

Stack Overflow用户

发布于 2011-04-08 22:56:50

您应该使用subprocess模块,使用它可以以灵活的方式控制stdoutstderros.system已弃用。

subprocess模块允许您创建一个表示正在运行的外部进程的对象。你可以从它的stdout/stderr中读取它,写它的stdin,发送信号,终止它等等。模块中的主要对象是Popen。还有许多其他方便的方法,如call等。docs非常全面,并且包含一个section on replacing the older functions (including os.system)

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5596911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档