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

如何让Python的os.system()在Windows上改用Ubuntu终端而非cmd?

实现方案

前提:你已经在Windows上安装了**WSL(Windows Subsystem for Linux)**并配置好了Ubuntu发行版。

方案1:直接通过WSL执行Linux命令

不用修改os.system的底层调用逻辑,只需在要执行的命令前添加wsl前缀,让Windows通过WSL转发命令到Ubuntu环境执行。示例:

import os
# 执行Ubuntu的ls命令
os.system('wsl ls -l /home')
# 执行Ubuntu本地的bash脚本
os.system('wsl bash /mnt/c/Users/YourName/scripts/test.sh')

这里os.system仍调用cmd,但cmd会通过wsl指令将命令传递给Ubuntu环境处理。

方案2:封装自定义函数替代os.system

如果不想每次都手动加wsl前缀,可以封装一个自定义函数,统一处理命令转发:

import os

def ubuntu_system(cmd):
    return os.system(f'wsl {cmd}')

# 使用示例
ubuntu_system('echo "Hello from Ubuntu terminal!"')
ubuntu_system('sudo apt update')

如果要执行复杂命令(含引号、管道符等),更推荐用subprocess模块,避免转义问题:

import subprocess

def ubuntu_run(cmd):
    # capture_output=True 可捕获命令输出,text=True 将输出转为字符串
    result = subprocess.run(f'wsl {cmd}', shell=True, capture_output=True, text=True)
    return result

# 示例:获取命令执行结果
output = ubuntu_run('ls -l /home').stdout
print(output)

方案3:弹出Ubuntu终端窗口执行命令

如果希望直接弹出Ubuntu终端窗口执行命令(而非在Python脚本控制台输出),可以调用WSL的Ubuntu启动程序:

import os
# 打开Ubuntu终端并执行命令,执行完后等待用户输入再关闭窗口
os.system('ubuntu.exe run "ls -l && read -p \'Press enter to exit...\'"')

若你的Ubuntu发行版名称不是默认的Ubuntu,可以用wsl -d <发行版名称>指定,比如:

os.system('wsl -d Ubuntu-22.04 run "echo Test && read"')
注意事项
  • Windows本地路径在Ubuntu中需转换为WSL格式:比如C:\Users\YourName对应/mnt/c/Users/YourName
  • 执行sudo类权限命令时,非交互式脚本需配置免密sudo(不建议明文传递密码,存在安全风险)
  • 若未设置默认WSL发行版,需在命令中通过-d参数明确指定发行版名称

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:24:23