簡體   English   中英

通過Python腳本啟動/停止Apache

[英]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())

原因:

  1. subprocess函數默認情況下不運行Shell,因此該字符串被解釋為命令的名稱:您應該使用列表在POSIX上傳遞多個命令行參數
  2. Popen()啟動命令並立即返回,而無需等待命令完成,即可能在httpd啟動之前發生。 假設Popen()調用是固定的, .communicate()等待子進程終止,因此它將在httpd啟動之后返回(無論它是否成功)。

發生這種情況的原因有很多:1.用戶處於sudoers狀態,並且配置為不插入密碼。

  1. sudo會記住您的密碼一段時間(取決於您的系統配置),請參閱: https : //unix.stackexchange.com/questions/37299/how-does-sudo-remember-you-already-entered-roots-password

是否可以在全新的終端會話中使用?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM