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版本
- 方案1:安装WSL2(Windows Linux子系统),在WSL的Linux环境下运行该Python脚本,注意Windows路径要适配WSL的挂载格式,比如D盘路径对应
- 修正脚本执行命令写法,推荐用
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
相关产品推荐
相关产品推荐

