如何在python中验证根权限的用户密码

如何在python中验证根权限的用户密码,python,linux,passwords,python-2.x,Python,Linux,Passwords,Python 2.x,我正在尝试编写一个python程序,该程序需要用户密码才能使用子流程库运行一些外部命令。代码大致如下所示 import subprocess passwordInput = raw_input("What is your password: ") subprocess.call('echo ' + passwordInput + ' | sudo -S pacman -Syy', shell=True) 此程序工作正常,但如果输入的密码不正确,程序将失败。如何添加某种防错功能来检测密码是否

我正在尝试编写一个python程序,该程序需要用户密码才能使用
子流程
库运行一些外部命令。代码大致如下所示

import subprocess

passwordInput = raw_input("What is your password: ")

subprocess.call('echo ' + passwordInput + ' | sudo -S pacman -Syy', shell=True)
此程序工作正常,但如果输入的密码不正确,程序将失败。如何添加某种防错功能来检测密码是否输入错误

我在想,也许可以在
while
循环中包装此代码,然后使用
try except
来测试密码,但是我不确定什么类型的
except
可以做到这一点


非常感谢您的帮助。

请不要使用
echo

import subprocess
subprocess.call(['sudo', '-S', 'pacman', '-Syy'])
sudo
程序将询问用户一定次数。Python程序不需要知道用户的密码。永远


另一个问题是您使用的是
shell=True
,这意味着如果我的密码是
$nakel0ver
,因为我喜欢蛇,您的程序将向
sudo
传递一个空密码,只需丢弃
回音即可

import subprocess
subprocess.call(['sudo', '-S', 'pacman', '-Syy'])
sudo
程序将询问用户一定次数。Python程序不需要知道用户的密码。永远


另一个问题是您使用的是
shell=True
,这意味着如果我的密码是
$nakel0ver
,因为我喜欢蛇,您的程序将向
sudo
传递一个空密码,只需丢弃
回音即可

import subprocess
subprocess.call(['sudo', '-S', 'pacman', '-Syy'])
sudo
程序将询问用户一定次数。Python程序不需要知道用户的密码。永远


另一个问题是您使用的是
shell=True
,这意味着如果我的密码是
$nakel0ver
,因为我喜欢蛇,您的程序将向
sudo
传递一个空密码,只需丢弃
回音即可

import subprocess
subprocess.call(['sudo', '-S', 'pacman', '-Syy'])
sudo
程序将询问用户一定次数。Python程序不需要知道用户的密码。永远



另一个问题是,您正在使用
shell=True
,这意味着如果我的密码是
$nakel0ver
,因为我喜欢蛇,您的程序将向
sudo

传递一个空密码,为什么不在sudoers文件中添加该程序/用户组合并提前回家呢?ps-ef中不会显示“回音密码”吗?如果是的话,这是一个安全问题。为什么不在sudoers文件中添加程序/用户组合并早点回家呢?ps-ef中不会显示“echo密码”吗?如果是的话,这是一个安全问题。为什么不在sudoers文件中添加程序/用户组合并早点回家呢?ps-ef中不会显示“echo密码”吗?如果是的话,这是一个安全问题。为什么不在sudoers文件中添加程序/用户组合并早点回家呢?ps-ef中不会显示“echo密码”吗?如果是,这是一个安全问题。好吧,我将把这段代码移植到第一次启动时运行的GUI前端,这样用户就不能在终端中输入,它将通过GUI输入。@josh:然后使用
gksudo
或其他什么。是的,
gksudo
就是这样。整个程序不应该一直作为root运行,否则我只会使用gksudo。我真的希望有一些我在我的帖子中描述的代码,因为有很多原因,如果不解释程序的全部目的,就有点难以解释。乔希:那是个错误。不要将密码存储在长时间运行的进程中,以便可以运行sudo。如有必要,以root用户身份运行守护程序并将命令转发给它。但是我重复一遍,不要在您的过程中存储用户的密码。好吧,我将把这段代码移植到第一次启动时运行的GUI前端,这样用户就不能在终端中输入,它将通过GUI输入。@josh:然后使用
gksudo
或其他什么。是的,
gksudo
就是这样。整个程序不应该一直作为root运行,否则我只会使用gksudo。我真的希望有一些我在我的帖子中描述的代码,因为有很多原因,如果不解释程序的全部目的,就有点难以解释。乔希:那是个错误。不要将密码存储在长时间运行的进程中,以便可以运行sudo。如有必要,以root用户身份运行守护程序并将命令转发给它。但是我重复一遍,不要在您的过程中存储用户的密码。好吧,我将把这段代码移植到第一次启动时运行的GUI前端,这样用户就不能在终端中输入,它将通过GUI输入。@josh:然后使用
gksudo
或其他什么。是的,
gksudo
就是这样。整个程序不应该一直作为root运行,否则我只会使用gksudo。我真的希望有一些我在我的帖子中描述的代码,因为有很多原因,如果不解释程序的全部目的,就有点难以解释。乔希:那是个错误。不要将密码存储在长时间运行的进程中,以便可以运行sudo。如有必要,以root用户身份运行守护程序并将命令转发给它。但是我重复一遍,不要在您的过程中存储用户的密码。好吧,我将把这段代码移植到第一次启动时运行的GUI前端,这样用户就不能在终端中输入,它将通过GUI输入。@josh:然后使用
gksudo
或其他什么。是的,
gksudo
就是这样。整个程序不应该一直作为root运行,否则我只会使用gksudo。我真的希望有一些我在我的帖子中描述的代码,因为有很多原因,如果不解释程序的全部目的,就有点难以解释。乔希:那是个错误。不要将密码存储在长时间运行的进程中,以便可以运行sudo。如有必要,以root用户身份运行守护程序并将命令转发给它。