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

带引号参数时subprocess.run与getoutput不等价的scp执行问题

解决subprocess.run执行scp跨系统传输文件的路径问题

问题核心是subprocess两种调用方式的参数处理逻辑完全不同:

  • 用subprocess.getoutput()时,依赖系统shell解析整个命令字符串,你加的'"F:/data_save"'会被shell解析成纯路径F:/data_save(带空格的路径也能被正确识别为单个参数)。
  • 但用列表形式调用subprocess.run()时,每个列表元素会直接作为命令的参数传递,没有shell介入解析,你之前给config_path加的'和"会被当成路径的一部分,导致scp去找'F:/data_save'这个不存在的路径,因此报错。

解决方案

  1. 修正config_path的定义,去掉所有多余的引号:
    # 无空格路径写法
    config_path = "Administrator@192.168.31.57:F:/data_save"
    # 如果路径带空格,直接写即可,不需要加任何引号
    # config_path = "Administrator@192.168.31.57:F:/data save"
    
  2. 用修正后的参数调用subprocess.run():
    subprocess.run(["sshpass", "-p", win_password, "scp", "StartSaving.tmp", config_path])
    

原理说明

列表形式的subprocess.run()会把每个元素原封不动传给目标命令,不需要像shell命令那样用引号包裹带空格的参数——整个字符串会被scp直接识别为单个路径参数,自然能正确处理带空格的目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:35:17