如何解决调用STDIN.getpass时终端密钥图标间歇性不显示问题
原因说明
这个密钥图标是终端模拟器自带的功能,只有终端正确识别到当前处于无回显密码输入场景时才会显示,间歇性不出现的核心原因是终端没有稳定捕获到STDIN.getpass的调用特征。
解决方案
你可以按以下步骤修改代码保证稳定触发:
- 给
STDIN.getpass显式传入包含密码相关关键词的提示字符串,终端通常会识别这类关键词触发图标显示,不要依赖方法默认的提示文本 - 同时刷新stdout和stderr的缓冲区,避免提示文本滞留在缓冲区没有输出到终端,导致检测失效
- 不要悬空调用
STDIN.getpass,就算不需要使用输入的密码,也要把返回值赋值给一个变量,避免部分Ruby版本的优化逻辑跳过调用的特征输出
修改后的代码示例
$stdout.flush $stderr.flush # 显式传入提示词,保证终端识别密码输入场景 temp_pwd = STDIN.getpass("请输入密码: ") # 不需要使用密码的话无需额外处理temp_pwd变量
如果修改后还是偶现,可以在调用前添加100毫秒的休眠,保证前面的所有输出逻辑都处理完成,避免其他异步输出打断终端的检测:
$stdout.flush $stderr.flush sleep 0.1 temp_pwd = STDIN.getpass("请输入密码: ")
内容的提问来源于stack exchange,提问作者nakakapagpabagabag
相关产品推荐
相关产品推荐

