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

Windows服务器上Python脚本无法在Linux服务器执行sh文件的问题

问题原因与解决方案

可能的原因及对应解决方法

1. 相对路径导致脚本找不到

  • 原因:exec_command('./whitelist.sh')使用相对路径,Paramiko连接远程服务器后默认工作目录是远程用户(此处为root)的Home目录(如/root),若脚本不在该目录下则会找不到,且因未捕获错误信息,导致无任何提示。
  • 解决:改用脚本的绝对路径执行,或先切换到脚本所在目录再执行:
    # 方式1:使用绝对路径
    stdin, stdout, stderr = ssh.exec_command('/path/to/your/whitelist.sh')
    # 方式2:先切换目录再执行
    ssh.exec_command('cd /path/to/script/directory && ./whitelist.sh')
    

2. 脚本缺少可执行权限

  • 原因:远程服务器上的whitelist.sh未设置可执行权限,无法直接运行。
  • 解决:两种处理方式任选其一:
    # 方式1:先给脚本添加可执行权限再运行
    ssh.exec_command('chmod +x /path/to/whitelist.sh')
    stdin, stdout, stderr = ssh.exec_command('/path/to/whitelist.sh')
    # 方式2:直接用bash解释器调用脚本(无需可执行权限)
    stdin, stdout, stderr = ssh.exec_command('bash /path/to/whitelist.sh')
    

3. 脚本缺少Shebang声明

  • 原因:脚本开头未添加#!/bin/bash(或#!/bin/sh),系统无法识别执行该脚本的Shell解释器。
  • 解决:编辑远程服务器上的whitelist.sh,在第一行添加:
    #!/bin/bash
    
    或直接使用上述“用bash解释器调用脚本”的方式绕开该问题。

4. 未捕获命令执行的错误信息

  • 原因:当前代码仅执行命令,但未读取stdout和stderr的内容,即便命令执行出错(如找不到脚本、权限不足)也无法察觉,误以为未执行。
  • 解决:执行命令后读取输出与错误信息,便于排查问题:
    stdin, stdout, stderr = ssh.exec_command('bash /path/to/whitelist.sh')
    # 读取并解码输出内容
    output = stdout.read().decode()
    error = stderr.read().decode()
    print("命令输出:", output)
    print("错误信息:", error)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:31:11