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

Python远程主机登录:grep结果写入文件但主机名无法写入问题

解决Paramiko执行命令时无法写入主机名到目标文件的问题

看起来你已经搞定了用Paramiko远程执行grep命令的核心功能,但卡在了把主机名写入目标文件的环节对吧?别担心,只要在代码里加几步整合逻辑就能解决,下面是修改后的完整实现:

import paramiko

# 加载远程登录用的私钥
k = paramiko.RSAKey.from_private_key_file("/Users/Documents/privatekey.pem")
c = paramiko.SSHClient()
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 把远程主机信息单独存为变量,方便后续复用
remote_host = "10.224.58.214"
remote_user = "ec2-user"

print("connecting")
c.connect(hostname=remote_host, username=remote_user, pkey=k)
print("connected")

# 要执行的grep命令(记得补全完整的文件名哦)
commands = ["grep jdbc /usr/share/activemq/conf/activemq.xml"]
# 本地要写入结果的文件路径
target_file = "./remote_grep_result.txt"

try:
    for cmd in commands:
        # 执行远程命令并获取输入输出流
        stdin, stdout, stderr = c.exec_command(cmd)
        # 读取grep的匹配结果,转成字符串并去除首尾空白
        grep_result = stdout.read().decode().strip()
        # 读取命令执行时的错误信息(如果有的话)
        exec_error = stderr.read().decode().strip()
        
        # 组装要写入的内容:先明确标注主机名,再追加grep结果
        write_content = f"=== 远程主机: {remote_host} ===\n"
        if grep_result:
            write_content += f"JDBC匹配内容:\n{grep_result}\n"
        else:
            write_content += "未找到匹配的JDBC内容\n"
        if exec_error:
            write_content += f"命令执行错误:\n{exec_error}\n"
        
        # 用追加模式写入本地文件,这样多台主机的结果可以存在同一个文件里
        with open(target_file, "a", encoding="utf-8") as f:
            f.write(write_content + "\n")
            
finally:
    # 不管执行成功还是失败,都要确保关闭SSH连接
    c.close()
    print("远程连接已关闭")

关键修改点说明

  • 把远程主机地址存为remote_host变量,方便后续在写入内容时直接调用
  • 执行命令后读取stdout拿到grep结果,同时捕获stderr的错误信息,避免遗漏异常情况
  • 手动组装包含主机名的写入内容,让结果文件的可读性更强
  • 使用with open的追加模式(a)写入文件,既保证文件操作的安全性,也支持后续扩展多台主机的批量操作

如果你要把结果写入远程主机的文件

如果你的需求是把主机名和grep结果直接写入远程机器的文件,可以直接修改执行的命令,让远程系统完成写入操作:

# 替换原有commands为以下两行,直接在远程写入文件
commands = [
    f'echo "=== 本机主机名: {remote_host} ===" >> /tmp/jdbc_grep_result.txt',
    'grep jdbc /usr/share/activemq/conf/activemq.xml >> /tmp/jdbc_grep_result.txt'
]

这样远程机器的/tmp/jdbc_grep_result.txt文件就会包含主机名和grep匹配的内容啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:39:26