我正在使用Selenium为Web应用程序编写测试套件。
在此过程中,我需要测试应用程序的行为,以防某个服务正在运行。
我想创建一个cql调用Python脚本来打开和关闭该服务。
我知道cgi调用是在webserver(Apache)的上下文中,但是认为发出sudo调用是这样的:
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运行的上下文,我该怎么做才能执行此调用?
至于安全性:这只能在测试机器上运行。
答案 0 :(得分:1)
这可能是一个路径问题..
您是否尝试过编写完整的路径:
command = '/usr/bin/sudo -S launchctl unload /Library/LaunchAgents/com.my.daemon.plist'
答案 1 :(得分:1)
命令应该是一个列表,而不是一个字符串。试试:
command = ['sudo', '-S', 'launchctl', 'unload', '/Library/LaunchAgents/com.my.daemon.plist']
答案 2 :(得分:1)
Apache运行的用户需要位于/ etc / sudoers文件中,或者属于sudo组,我想这通常不会。您还需要让它不要求在/ 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
答案 3 :(得分:0)
不能以这种方式运行sudo - sudo需要一个控制终端才能运行。