Python- 如何使用 Popen 获取 Sudo 命令的输出

Python- How To Get Output Of Sudo Command Using Popen

sudo 命令根据用户名验证用户密码。我正在编写一个简单的程序,根据 sudo 命令检查用户的输入是否有效。我正在使用 -S 标签以便从外部传递输入,我正在使用 Popen() 到 运行 脚本:

import getpass
import subprocess
import time

password = getpass.getpass()
proc = subprocess.Popen('sudo -k -S -l'.split(), stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
output = proc.communicate(password.encode())
print(f'This is the value of the output {output[0]}')

如果用户在 getpass.getpass() 中输入了错误的密码,我需要根据实际用户密码对其进行验证。在这种情况下,sudo 应该输出 Sorry Please Try Again。有人可以告诉我如何读取该错误吗?

当我在终端中 运行 时:

➜  Desktop python3.8 test.py
Password: 
Sorry, try again.
This is the value of the output b''

谢谢,干杯,非常感谢你的帮助。

Python Documentation 说:

Note that if you want to send data to the process’s stdin, you need to create the Popen object with stdin=PIPE.

所以使用

proc = subprocess.Popen(['sudo', '-S', '-l'], stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE)

允许使用 communicate 写入密码,否则它只是等待您在终端上输入密码(没有提示,因为它被捕获)。

任何错误消息都可以在 output 变量中找到,特别是 output[1] 对应于 stderr。