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

Windows 10下subprocess.call()报错找不到文件,Unix脚本适配咨询

解决Windows下subprocess调用copy命令的文件找不到问题

我帮你梳理下问题所在,你遇到的是Windows环境下用Python subprocess调用DOS内部命令时的几个典型坑,咱们一步步解决:

核心问题分析

  1. 路径字符串的转义隐患:
    你定义的ref_fits_filename="D:\TESS\catalog files\TIC55234031.fts"里,虽然\T不是Python的转义字符,但如果路径里出现\t(比如D:\temp\file.fts),就会被解析成制表符,直接导致路径错误。所以最好用原始字符串或者双反斜杠来避免转义问题。

  2. subprocess调用DOS内部命令的方式错误:
    copy是Windows CMD的内部命令,不是独立的可执行文件(比如copy.exe不存在),所以不能直接把copy作为subprocess的第一个参数,必须通过cmd /c来触发执行。

  3. 参数格式错误:
    你代码里写的['copy ', ref_fits_filename,' ....']有两个问题:

    • copy 后面多了个空格,subprocess会把它当成命令名的一部分,系统会找不到名为copy (带空格)的命令;
    • ....应该是.,表示当前目录,这明显是输入笔误。

修正后的代码示例

import subprocess

# 用原始字符串定义路径,彻底避免转义问题
ref_fits_filename = r"D:\TESS\catalog files\TIC55234031.fts"

# 正确调用cmd /c执行copy命令,列表传参自动处理空格路径
exit_code = subprocess.call(['cmd', '/c', 'copy', ref_fits_filename, '.'])

# 可以通过返回码判断是否执行成功
if exit_code == 0:
    print("文件复制完成!")
else:
    print(f"复制失败,错误代码:{exit_code}")

额外说明

用列表形式传递subprocess参数的好处是,subprocess会自动处理带空格的路径,不需要手动给路径加引号(像你在DOS命令里写的copy "D:\tess\catalog files\TIC55234031.fts" .那样),这样能避免很多引号嵌套的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:30:14