首页 > 解决方案 > python脚本上的ssh没有返回值

问题描述

我正在将一个 python 文件 ( abnormalattr.py) 从一个 linux 服务器复制到另一个,然后使用以下命令在第二个服务器上执行它:

ssh root@machinename python tmp/abnormalattr.py

这将返回 NONE。但是如果我像这样从第二个 linux 服务器执行:

ssh root@machinename
python tmp/abnormalattr.py

...它返回正确的值。

标签: pythonssh

解决方案


该脚本指的是(而不是不必要地间接地)os.environ["HOSTNAME"].

作为交互式登录 shell 调用的 bash 实例——由ssh hostname配置为使用没有其他参数的 bash 的帐户创建——源/etc/profile(如果存在),然后是第一个存在的~/.bash_profile~/.bash_login~/.profile。(交互式非登录外壳运行~/.bashrc)。

当您运行时ssh hostname 'some-command',该命令在非交互式shell 中运行。因此,它没有/etc/profile任何其他脚本的好处。


要以不依赖于 shell 初始化的方式获取主机名,请使用socketPython 中的库:

import socket
print(socket.getfqdn())

推荐阅读