在Python中,你可以使用subprocess
模块来执行带有sudo权限的命令并捕获输出
import subprocess
import shlex
import os
def sudo_command(command, user='your_username', password=None):
# 将命令拆分为参数列表
args = shlex.split(command)
# 如果需要提供密码,可以使用pexpect库
if password:
import pexpect
child = pexpect.spawn(f'sudo -u {user} {command}', timeout=10)
index = child.expect(['password:', 'Permission denied', pexpect.EOF])
if index == 0:
child.sendline(password)
child.expect(pexpect.EOF)
elif index == 1:
print("Permission denied")
return None
else:
# 如果不需要提供密码,可以直接使用subprocess模块
child = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# 获取命令输出
output, error = child.communicate()
# 检查命令是否成功执行
if child.returncode == 0:
return output.decode('utf-8')
else:
print(f"Error: {error.decode('utf-8')}")
return None
# 示例
command = "ls -l /root"
output = sudo_command(command)
if output:
print(output)
else:
print("Command execution failed")
请注意,将用户名和密码直接写入代码是不安全的。在实际应用中,你可以考虑使用更安全的方法,例如使用SSH密钥对进行身份验证。此外,根据你的需求,你还可以将日志审计功能集成到你的应用程序中,以便在需要时记录命令执行过程和结果。