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

如何在Python脚本中为sudo命令自动输入密码

问题根因

你当前的写法无效是因为os.system()每调用一次都会创建独立的子shell进程:第一次执行sudo的进程处于等待密码输入的状态时,第二次os.system("myPassword")是在另一个全新的进程里执行,密码根本不会传递到sudo所在进程的标准输入流,所以完全不生效。


解决方案

方法1:sudo -S参数直接传递(最简实现)

sudo自带-S(即--stdin)参数,支持从标准输入读取密码,你可以直接通过管道把密码传给sudo,单命令即可完成操作:

import os
# 把myPassword替换为你的实际密码
os.system('echo "myPassword" | sudo -S pmset schedule cancelall')

注意:该写法会把明文密码拼接在命令行中,存在被其他进程从进程列表中读取到密码的风险,仅适合个人自用的测试场景使用。

方法2:subprocess模块实现(更安全可控)

如果要避免密码出现在命令行参数中,可以用subprocess模块直接往sudo进程的标准输入写入密码,安全性更高:

import subprocess

# 替换为你的实际密码
password = "myPassword"
cmd = ["sudo", "-S", "pmset", "schedule", "cancelall"]

# 启动进程并传入密码
proc = subprocess.Popen(
    cmd,
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    text=True
)
stdout, stderr = proc.communicate(input=password + "\n")

# 可选:判断执行结果
if proc.returncode == 0:
    print("命令执行成功")
else:
    print(f"执行失败,错误信息:{stderr}")

安全提示

无论使用哪种方法,都建议给你的setting_pm.py脚本设置严格的权限(仅当前用户可读可写),避免密码泄露。如果不想硬编码密码在脚本中,也可以将密码存储在 macOS 系统钥匙串中,执行时通过security命令读取密码再传入,进一步提升安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:33:01