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

Python使用subprocess调用spi.exe时提示无法打开输出文件如何解决

报错排查与解决方案

第一步:修正输入字符串的转义错误

你的输入字符串存在两处明显的转义错误,导致传递给spi.exe的指令序列错乱:

  • 7\8 应为 7\n8,漏写了代表换行的第二个反斜杠,会导致第7、8个时间尺度的输入被拼接成非法内容
  • 12\input.txt 应为 12\ninput.txt,此处的反斜杠没有转义,会导致第12个时间尺度的输入和输入文件名拼接,最终输出文件名的输入位置被错位占用

第二步:排查工作目录匹配问题

subprocess.run默认使用Python脚本的执行目录作为子进程的工作目录,而非spi.exe的所在目录。你使用相对路径input.txt、output.dat的情况下,spi.exe会在Python脚本的运行目录下查找输入文件、创建输出文件,而非spi.exe所在的C:/Users/user/Desktop/for_spi/目录。
可以用以下任意一种方式解决:

  • 在run参数中指定cwd="C:/Users/user/Desktop/for_spi/",强制子进程的工作目录和spi.exe目录一致
  • 将input.txt、output.dat改为绝对路径,例如C:/Users/user/Desktop/for_spi/input.txt
  • 把input.txt放到Python脚本的执行目录下,同时确认该目录对当前用户开放写权限

第三步:调整shell参数避免解析异常

Windows平台下同时传入列表类型的args参数和shell=True会触发参数解析异常,推荐二选一调整:

  • 保留列表args,将shell=True改为shell=False
  • 把args改为字符串格式:"C:/Users/user/Desktop/for_spi/spi.exe f",保留shell=True

修正后的代码示例

from subprocess import run, PIPE

p = run(
    ["C:/Users/user/Desktop/for_spi/spi.exe", 'f'],
    shell=False,
    stdout=PIPE,
    # 修正转义错误,同时输入输出用绝对路径
    input='12\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\nC:/Users/user/Desktop/for_spi/input.txt\nC:/Users/user/Desktop/for_spi/output.dat\n',
    encoding='ascii',
    # 可选:指定工作目录
    # cwd="C:/Users/user/Desktop/for_spi/"
)
print(p.returncode)
print(p.stdout)
print("File done")

可选附加排查项

  • 确认input.txt文件存在且无占用,当前用户对目标路径有读权限
  • 确认output.dat未被其他程序(如记事本、相关业务软件)占用,目标路径有写权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:39:02