[英]Start/Stop Apache via Python script
在运行Python 2.6.6的RHEL 6.7服务器上,我尝试以Python脚本中的非特权用户身份启动和停止Apache Web服务器。
我正在使用的命令是“ sudo service httpd”,其中参数是“ start”,“ stop”或“ status”。
p = subprocess.Popen("sudo service httpd start", stdout=subprocess.PIPE, stderr=subprocess.PIPE)
仅此行不起作用。 添加一个
p.communicate()
使命令按需工作。 有人可以告诉我为什么吗?
更新: sudoers文件包含一行,该行允许我的用户无密码运行这些命令。
两种代码都.communicate()
带有和不带有.communicate()
)。
您应该改用(假设这些命令使用无密码sudo
):
import subprocess
subprocess.check_call("sudo service httpd start".split())
原因:
subprocess
函数默认情况下不运行Shell,因此该字符串被解释为命令的名称:您应该使用列表在POSIX上传递多个命令行参数 Popen()
启动命令并立即返回,而无需等待命令完成,即可能在httpd启动之前发生。 假设Popen()
调用是固定的, .communicate()
等待子进程终止,因此它将在httpd启动之后返回(无论它是否成功)。 发生这种情况的原因有很多:1.用户处于sudoers状态,并且配置为不插入密码。
是否可以在全新的终端会话中使用?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.