如何在执行Python脚本时为getpass传递输入实现自动化?
解决方法
你提到的echo 'test' | python3 inputpass.py方式行不通,因为getpass.getpass()函数默认会绕过标准输入(stdin),直接从终端设备(tty)读取输入,目的是避免密码通过管道/重定向被泄露。
下面是几种可行的自动化输入方法:
使用
expect工具(需先通过包管理器安装,比如apt install expect或brew install expect):
新建一个auto_input.exp脚本,内容如下:#!/usr/bin/expect spawn python3 inputpass.py # 匹配getpass默认的提示符(通常是"Password: ") expect "Password:" send "test\r" # 等待脚本执行完成 expect eof给脚本添加执行权限:
chmod +x auto_input.exp,然后运行./auto_input.exp即可。使用Python的
pexpect库(需先安装:pip install pexpect):
新建一个run_script.py脚本,内容如下:import pexpect # 启动目标脚本 proc = pexpect.spawn("python3 inputpass.py") # 匹配密码提示符 proc.expect("Password:") # 发送密码并换行 proc.sendline("test") # 输出脚本的执行结果 proc.interact()运行
python3 run_script.py就能自动完成输入。使用
script命令模拟终端环境:
直接在终端执行以下命令,无需额外脚本:script -q -c "python3 inputpass.py" /dev/null << EOF test EOFscript命令会创建一个伪终端,让getpass能正常读取到输入内容。
内容的提问来源于stack exchange,提问作者Ghostman
相关产品推荐
相关产品推荐

