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

如何使用Python调用WSL Ubuntu并自动执行需输密码的sudo命令

解决方案

原有使用os.system('ubuntu.exe')的方式仅能打开空白WSL终端,无法向终端传递后续执行命令,因此需要替换为功能更完善的subprocess模块实现需求,以下是两种可行方案:

方案1:配置sudo免密规则(推荐,无密码泄露风险)

提前在WSL Ubuntu中配置指定命令的sudo免权限,不需要在Python脚本中硬编码密码,安全性更高:

  • 手动打开WSL Ubuntu终端,执行命令sudo visudo打开sudo配置文件
  • 在配置文件末尾新增如下行,替换<你的WSL用户名>为你实际的Ubuntu系统用户名:
    <你的WSL用户名> ALL=(ALL) NOPASSWD: /etc/init.d/dbus start, /etc/init.d/xrdp start
    
  • 保存退出配置文件后,上述两条服务启动命令执行sudo时将无需输入密码,Python脚本可改写为:
    import subprocess
    # 执行完命令直接关闭终端
    subprocess.run(["ubuntu.exe", "sudo /etc/init.d/dbus start && sudo /etc/init.d/xrdp start"], shell=True)
    
    # 如果需要执行完命令后保留终端窗口,替换为以下命令即可
    # subprocess.run(["ubuntu.exe", "run", "bash", "-c", "sudo /etc/init.d/dbus start && sudo /etc/init.d/xrdp start; exec bash"], shell=True)
    

方案2:脚本自动传递密码(不推荐,明文存储密码有泄露风险)

如果不想修改sudo配置,可以利用sudo -S参数从标准输入读取密码的特性,直接在脚本中传递密码完成自动输入:

import subprocess

# 替换为你实际的WSL账户密码
WSL_PASSWORD = "your_password"

# 构造命令,通过echo将密码传递给sudo
command = f'echo {WSL_PASSWORD} | sudo -S /etc/init.d/dbus start && sudo -S /etc/init.d/xrdp start'
# 执行命令
subprocess.run(["ubuntu.exe", "run", "bash", "-c", command], shell=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:06:05