从python中运行需要root访问权限的命令

从python中运行需要root访问权限的命令,python,subprocess,sudo,Python,Subprocess,Sudo,我最近一直在玩弄子流程。随着我做的越来越多;我发现自己需要根访问。我想知道是否有一种简单的方法可以为子流程模块需要的命令输入根密码。因此,当提示我输入密码时,我会修改脚本并提供密码,然后运行命令。我知道这是一种不好的做法,因为代码将在沙盒中运行,并且与系统的其余部分分离;我也不想以root身份运行 如果可能的话,我真的很感激举个小例子。我知道您可以使用expect来实现这一点,但我正在寻找更以python为中心的东西。我知道pexpect是存在的,但是对于这个简单的任务来说有点过分了 谢谢 对于

我最近一直在玩弄子流程。随着我做的越来越多;我发现自己需要根访问。我想知道是否有一种简单的方法可以为子流程模块需要的命令输入根密码。因此,当提示我输入密码时,我会修改脚本并提供密码,然后运行命令。我知道这是一种不好的做法,因为代码将在沙盒中运行,并且与系统的其余部分分离;我也不想以root身份运行

如果可能的话,我真的很感激举个小例子。我知道您可以使用expect来实现这一点,但我正在寻找更以python为中心的东西。我知道
pexpect
是存在的,但是对于这个简单的任务来说有点过分了


谢谢

对于运行Python程序的用户来说,最好利用它。您可以指定无需密码即可从sudo运行的特定命令和参数。以下是一个例子:

有很多方法,但我更喜欢将命令集分配给组的方法。假设我们想创建一个组,允许人们以
root
的身份运行
tcpdump
。因此,让我们将该组称为
tcpdumpers

首先创建一个名为
tcpdumpers
的组。然后修改(使用
visudo
命令):

现在,任何添加到
tcpdumpers
组的用户都可以像这样运行tcpdump:

% sudo tcpdump 
从那里,您可以轻松地将此命令作为
子进程运行


这消除了将root密码硬编码到程序代码中的需要,并且可以对谁可以在系统上以root权限运行什么进行精确控制。

我真的不理解“因此,当提示我输入密码时,我需要脚本并提供它,然后运行命令。”您希望用户输入根密码,还是希望在代码中硬编码根密码?(我希望不是后者!)@Sven我想两者都做;我知道后者不好。我只是想知道这是否可能。如果可能的话,我们将非常感谢您尝试过的一个小例子。请看这个问题。对于第二个选项,它非常相似。您最终将遇到与此处讨论的问题相同的问题:我最近不得不对splunk警报脚本执行类似的操作。sudo就是为这个而设计的。请注意,编辑sudoers文件实际上应该使用
visudo
,而不是任何其他任意编辑器来完成,否则可能会导致以下情况
% sudo tcpdump