[英]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.