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

如何在Windows的Python脚本中调用WSL Ubuntu 20.04环境的命令?

问题排查与解决方案

核心问题梳理

你需要在Windows Python脚本中调用WSL Ubuntu 20.04的Cshell脚本,但当前尝试要么执行失败,要么生成空日志,同时需要在Spyder中实时查看Shell输出。以下是具体排查和解决步骤:

1. 脚本执行器不匹配(空日志直接原因)

你的辅助脚本subsidence_script_1.sh的shebang是#!/bin/csh(指定用Cshell解析),但调用时却用dash subsidence_script_1.sh——dash是Bourne Shell变种,无法正确解析Cshell语法,直接导致脚本执行失败,所以生成空日志。

修正方式:直接用Cshell运行脚本,Python调用代码改为:

import os
os.system('wsl -e csh /mnt/d/路径/subsidence_script_1.sh')

注意替换为脚本在WSL中的绝对路径(比如脚本放在Windows D盘根目录,对应WSL路径是/mnt/d/subsidence_script_1.sh)。

2. 路径错误修正

第一次尝试中的cd ../../mnt/d/...完全错误,WSL中Windows磁盘的挂载路径是/mnt/盘符/,直接用绝对路径/mnt/d/Projecten/Bodemdaling/Working_directories/Hawaii/asc/data即可,无需上级目录前缀。

3. 后台执行导致的进程终止问题

原命令末尾的&会把脚本放到后台执行,但WSL会话可能在Python调用结束后直接终止后台进程,导致脚本未完成就被杀死,日志为空。先去掉&,让脚本前台执行,确认功能正常后再考虑后台执行(若需后台,需保证WSL会话不被强制终止)。

修改后的辅助脚本:

#!/bin/csh
cd /mnt/d/Projecten/Bodemdaling/Working_directories/Hawaii/asc/data
organize_files_tops_linux.csh SAFE_filelist ../reframed/pins.ll 1 &> oft_mode1.log

4. Spyder中实时打印Shell输出

os.system无法实时捕获输出,改用subprocess模块实现实时打印:

import subprocess

# 直接执行命令(无需辅助脚本的写法)
command = '''wsl -e csh -c 'cd /mnt/d/Projecten/Bodemdaling/Working_directories/Hawaii/asc/data; organize_files_tops_linux.csh SAFE_filelist ../reframed/pins.ll 1' '''

# 启动子进程并捕获输出
proc = subprocess.Popen(
    command,
    shell=True,
    stdout=subprocess.PIPE,
    stderr=subprocess.STDOUT,
    text=True
)

# 逐行实时打印输出
for line in proc.stdout:
    print(line, end='')

# 等待进程结束并获取返回码
proc.wait()
print(f"\n命令执行完成,返回码: {proc.returncode}")

如果想用辅助脚本,把command替换为'wsl -e csh /mnt/d/路径/subsidence_script_1.sh'即可。

额外排查点

  • 给Cshell脚本添加可执行权限:在WSL终端运行chmod +x /mnt/d/.../organize_files_tops_linux.csh
  • 手动在WSL中执行一遍目标命令,确认SAFE_filelist、../reframed/pins.ll路径正确,排除脚本本身的逻辑问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:40:21