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

Python(Spyder)调用os.system/subprocess.run运行xmrgtoasc转换文件报错求助

问题原因与解决方案

第一个报错原因:os.system执行失败

你当前运行脚本的环境是Windows系统,触发报错有两个核心原因:

  • ./是Linux/macOS系统下执行当前目录可执行文件的写法,Windows的命令行环境原生不识别该语法
  • 你要调用的xmrgtoasc是ELF 64位格式的Linux可执行程序,Windows系统原生无法直接运行该类程序
  • 额外语法问题:原脚本中./xmrgtoasc-i的写法错误,程序名和-i参数之间没有空格,就算在Linux环境下运行也会提示找不到名为xmrgtoasc-i的程序

第二个报错原因:FileNotFoundError

该报错是前置转换步骤失败衍生的问题:因为xmrgtoasc程序根本没有成功运行,自然不会生成对应的.asc格式文件,执行shutil.move时找不到目标文件就会抛出路径不存在的错误,和你配置的路径本身没有关系。


可行解决步骤

  • 首先解决程序运行兼容性问题,二选一即可:
    • 方案1:安装WSL2(Windows Linux子系统),在WSL的Linux环境下运行该Python脚本,注意Windows路径要适配WSL的挂载格式,比如D盘路径对应/mnt/d/
    • 方案2:查找获取编译好的Windows版本xmrgtoasc可执行程序,替换原有的Linux版本
  • 修正脚本执行命令写法,推荐用subprocess.run避免空格、特殊字符识别问题,参考修改后的代码:
import os
import subprocess
import shutil

infilepath = 'D:/UTA/Research work/JunaidData/1996/New/'
outfilepath = 'D:/UTA/Research work/JunaidData/Output Jan 1996/'
# 提前创建输出目录避免路径不存在报错
os.makedirs(outfilepath, exist_ok=True)

# 此处保留你原有逻辑的i变量
mpefilepath = infilepath + 'xmrg01011996' + i[-3:-1] + 'z'
out_filename = 'MRMS01011996' + i[-3:-1] + 'z.asc'
out_fullpath = os.path.join(outfilepath, out_filename)

# 替换为你实际的xmrgtoasc程序路径:
# Windows版本写exe完整路径,比如r'C:\tools\xmrgtoasc.exe'
# WSL环境写Linux路径,比如'/home/yourname/tools/xmrgtoasc'
xmrgtoasc_path = './xmrgtoasc'

# 执行转换命令,参数拆分传递避免空格错误
subprocess.run(
    [xmrgtoasc_path, '-i', mpefilepath],
    stdout=open(out_fullpath, 'w'),
    check=True
)

# 注意:如果xmrgtoasc本身会在输入文件同目录生成.asc文件,才保留下面的移动逻辑,否则可以直接删除
# shutil.move(mpefilepath + '.asc', outfilepath)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:24:03