gpt4 book ai didi

python - 通过Python制作bash脚本密码的窗口

转载 作者:行者123 更新时间:2023-12-01 05:02:05 25 4
gpt4 key购买 nike

我正在编写一个由图形用户界面组成的脚本。该 GUI 有一个用户单击的按钮,该按钮执行 DropBox 上托管的 bash 脚本。然后,我将 bash 脚本的输出写入日志文件。

path = os.path.expanduser('~') + '/Desktop/'
cmd = 'curl -fsSL https://www.dropbox.com/BASH_SCRIPT_dl=1 | bash'
with open(path+'Step 1 Log.txt', 'w') as out:
process = subprocess.Popen(cmd, shell=True, stdout=out, stderr=out)
print('Step 1 completed. Continue onto Step 2.\n\n')

我遇到的问题是这个 bash 脚本包含 sudo 命令(用于处理安装新软件的权限)。当 bash 脚本到达 sudo 命令时,没有可以输入密码的终端窗口。目前,生成的日志文件显示 sudo 命令之前的所有 bash 命令的结果。我假设 bash 脚本只是终止。

我想到的一个可能的解决方法是让用户在脚本开头输入密码,将其保存为变量,然后在 Popen 命令中将其传递。然而,我对 Popen.communicate() 方法的所有努力都让我感到困惑。我还研究了 pexpect 库,但我更喜欢使用 stdlib 解决方案。

无论如何,我更希望用户在 bash 脚本提示时简单地输入密码。我正在运行 Python 3.4,但一旦完成,我会将整个项目移植回 2.7(MacBook 上的 native Python 版本)。

编辑:感谢 Etan Reisner 的建议。我对 bash 脚本的了解有限,这是我的同事制作的。包含sudo命令的函数如下:

function setsudo() {
echo -e "\nPlease enter your laptop password: "
sudo -v
if [[ ${?} -ne 0 ]] ; then
echo "!! User Password not accepted, exiting....!!"
exit 1;
fi
while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &
}

我正在查看 sudo 手册并在终端中进行操作,以了解应该替换 sudo -v 的内容。 -A 究竟是如何实现的?

最佳答案

这就是 sudo -A 参数的用途:

-A

Normally, if sudo requires a password, it will read it from the user's terminal. If the -A (askpass) option is specified, a (possibly graphical) helper program is executed to read the user's password and output the password to the standard output. If the SUDO_ASKPASS environment variable is set, it specifies the path to the helper program. .... If no askpass program is available, sudo will exit with an error.

关于python - 通过Python制作bash脚本密码的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25876153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com