【问题标题】:Batch command not recognized when executed through python通过python执行时无法识别批处理命令
【发布时间】:2019-07-13 17:56:01
【问题描述】:

我尝试通过 Python 的 os.system() 函数运行批处理命令 (ssh ...)。需要注意的是,当我直接从cmd运行时,该命令被识别;但是,通过 Python subprocess 调用同样失败。

cmd:

这是我正在使用的代码:

import os
os.system("ssh ...")

在 Python 中:

运行 .py 文件:

为什么在通过 Python 的子进程调用运行时,ssh 命令(可识别的可执行文件)无法识别?

【问题讨论】:

  • python 可能需要ssh的完整路径
  • @furas 好吧,这个东西适用于其他命令(如node),以与帖子中所示相同的方式完成。 ssh 的路径(显然)在环境变量值中提供
  • ssh 不是批处理命令,而是普通程序c:\....\ssh.exe。系统使用变量PATH 和应在其中搜索此程序的文件夹列表。
  • 你可以比较系统中的PATH和Python中的os.getenv('PATH')。也许有区别
  • 那么它应该在系统范围内PATH,所以我不知道出了什么问题。

标签: windows command-line batch-file python


【解决方案1】:

ssh 不是标准的 Windows 可执行文件(还没有!),它应该是从第 3 方安装的。

所以你可能在环境路径变量中没有ssh 的路径。

要么:

  • 尝试在 Python 中使用完整路径执行

  • 打开cmd 提示并使用此方法添加它(将YOUR_PATH 替换为ssh.exe 所在目录的路径)。

    PATH YOUR_PATH;%Path%
    

    例如

    PATH C:\Program Files\Some_SSH\bin\;%Path%
    

这会将其永久添加到系统上的路径中。

【讨论】:

  • 从命令行提示符执行PATH C:\Program Files\Some_SSH\bin\;%Path%不会将其永久添加到系统中。要在 Windows 上执行此操作,您需要通过控制面板修改系统设置。执行此操作的详细信息因操作系统的不同版本而略有不同,并且可能需要管理权限。
  • @martineau,谢天谢地,修改 shell 中的变量不是永久性的。在任何人建议之前,让我补充一点,我们不应该使用 setx.exe 天真地修改PATH。 setx.exe 必须与 reg.exe 仔细结合以修改注册表中的系统或每个用户的“PATH”值。这不是微不足道的。对于交互式编辑,使用 GUI 环境变量编辑器要简单得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-25
  • 2023-03-16
  • 2013-09-20
相关资源
最近更新 更多