You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Linux上的Python程序预提供多次密码输入?

解决Python getpass多次输入预填充的问题

因为getpass模块默认是从终端设备(/dev/tty)读取输入,而非标准输入(stdin),所以你用echo管道的方式无效,下面给你几个可行的解决方法:

方法1:用expect自动处理交互

expect是专门处理交互式程序的工具,步骤如下:

  1. 先安装expect(根据你的Linux发行版选择命令):
    # Debian/Ubuntu 系列
    sudo apt install expect
    # RHEL/CentOS 系列
    sudo yum install expect
    
  2. 编写expect脚本(比如命名为auto_fill_pass.exp):
    #!/usr/bin/expect -f
    set timeout 10
    spawn python myprog.py
    # 替换成你程序里第一个密码的提示文本
    expect "请输入密码1:"
    send "pass1\r"
    # 替换成你程序里第二个密码的提示文本
    expect "请输入密码2:"
    send "pass2\r"
    expect eof
    
  3. 给脚本添加执行权限:
    chmod +x auto_fill_pass.exp
    
  4. 运行脚本即可自动完成输入:
    ./auto_fill_pass.exp
    

方法2:用script命令模拟伪终端

如果不想额外安装工具,可以用系统自带的script命令模拟终端环境,让getpass能读取到预输入内容:

script -q -c "python myprog.py" /dev/null << EOF
pass1
pass2
EOF

其中-q是静默模式,/dev/null用来丢弃自动生成的日志文件,两行密码分别对应程序中两次getpass的输入要求。

方法3:修改代码支持命令行参数传入(可选)

如果你能修改Python程序,可以添加从命令行参数读取密码的逻辑(注意:这种方式密码会暴露在进程列表中,仅适合测试场景):

import getpass
import sys

def get_password(prompt, arg_index):
    # 优先从命令行参数取密码,没有则用getpass提示
    if len(sys.argv) > arg_index:
        return sys.argv[arg_index]
    return getpass.getpass(prompt)

pwd1 = get_password("密码1: ", 1)
pwd2 = get_password("密码2: ", 2)

运行时直接传入密码参数:

python myprog.py pass1 pass2

内容的提问来源于stack exchange,提问作者user21113865

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:12:42