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''
谢谢,干杯,非常感谢你的帮助。
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。
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''
谢谢,干杯,非常感谢你的帮助。
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。