2014-01-21 187 views
1

我正在爲使用Selenium的Web應用程序編寫測試套件。通過CGI運行sudo命令(Python)

在這個過程中,我需要測試應用程序的行爲,以防某些服務運行或不運行。

我想創建一個cgi調用,以打開和關閉服務的Python腳本。

我知道CGI呼叫的網絡服務器(Apache)的背景下卻認爲,發行須藤呼叫,像這樣:

import subprocess 
import os 
command = 'sudo -S launchctl unload /Library/LaunchAgents/com.my.daemon.plist' 
pwd = 'pwd123' 
test1 = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE) 
test1.communicate(input=pwd) 
test2 = os.system('echo %s|%s' % (pwd,command)) 

會做的伎倆,以及他們沒有我得到的返回碼256.

我可以做些什麼來執行此調用而不涉及Apache運行的上下文?

至於安全性:這隻會在測試機器上運行。

回答

1

運行Apache的需要是在/ etc/sudoers文件,或屬於須藤組,我猜它通常不會將用戶。您還需要使其不要求輸入密碼,這是在/ etc/sudoers文件配置

對於Ubuntu的,檢查這些了:https://askubuntu.com/questions/7477/how-can-i-add-a-new-user-as-sudoer-using-the-command-line

https://askubuntu.com/questions/147241/execute-sudo-without-password

+0

Bingo,運行Apache的用戶不在sudoer組中。那就是訣竅。非常感謝 –

1

這可能是一個路徑問題的..

您是否嘗試過寫出完整的路徑是這樣的:

command = '/usr/bin/sudo -S launchctl unload /Library/LaunchAgents/com.my.daemon.plist' 
+0

感謝您的回覆,該命令在命令行上正常工作,所以不是這樣。 –

1

命令應該是一個列表,而不是一個字符串。試着用:

command = ['sudo', '-S', 'launchctl', 'unload', '/Library/LaunchAgents/com.my.daemon.plist'] 
+0

感謝您的回覆,該命令在命令行上正常工作,所以不是這樣。 –