Windows 10下subprocess.call()报错找不到文件,Unix脚本适配咨询
解决Windows下subprocess调用copy命令的文件找不到问题
我帮你梳理下问题所在,你遇到的是Windows环境下用Python subprocess调用DOS内部命令时的几个典型坑,咱们一步步解决:
核心问题分析
路径字符串的转义隐患:
你定义的ref_fits_filename="D:\TESS\catalog files\TIC55234031.fts"里,虽然\T不是Python的转义字符,但如果路径里出现\t(比如D:\temp\file.fts),就会被解析成制表符,直接导致路径错误。所以最好用原始字符串或者双反斜杠来避免转义问题。subprocess调用DOS内部命令的方式错误:
copy是Windows CMD的内部命令,不是独立的可执行文件(比如copy.exe不存在),所以不能直接把copy作为subprocess的第一个参数,必须通过cmd /c来触发执行。参数格式错误:
你代码里写的['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
相关产品推荐
相关产品推荐

