【问题标题】:How can I read a file with paramiko?如何使用 paramiko 读取文件?
【发布时间】:2018-01-06 10:31:21
【问题描述】:

我使用paramiko 编写了一些脚本。 我的脚本使用ssh 连接、输出文件和打印输出文件工作。

当我运行脚本时,我收到以下错误:

Traceback(最近一次调用最后一次): 文件“test.py”,第 31 行,在 打印线 ValueError: 对已关闭文件的 I/O 操作

我的脚本,

#!/usr/bin/python
# -*- coding: utf-8 -*-

### Netapp C-Mode Connection and command excute
import paramiko
import sys
import pandas as pd
import xlsxwriter

from paramiko import AutoAddPolicy

sip = raw_input('input IP.\n')
sid = raw_input('input ID.\n')
spass = raw_input('input PASS.\n')

client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(AutoAddPolicy())
client.connect(hostname=sip, username=sid, password=spass)

stdin, stdout, stderr = client.exec_command('hostname')
sys.stdout=open("c_host.txt","w")
print (stdout.read()).strip()
sys.stdout.close()

client.close()

f = open("c_host.txt")
for line in f:
        print (line)

根据我的脚本有什么想法为什么会发生这个错误?

【问题讨论】:

    标签: python paramiko


    【解决方案1】:

    print 的默认目标是 sys.stdout,您将其重定向并在尝试的 print 上方关闭了 4 行。而不是重定向sys.stdout,只需告诉print你想要的目标是什么(或使用文件的write方法):

    stdin, stdout, stderr = client.exec_command('hostname')
    target_f = open("c_host.txt", "w")
    print(stdout.read().strip(), file=target_f)
    target_f.close()
    

    【讨论】:

    • 谢谢。但是您的脚本发生错误。文件“9.brocade.py”,第 26 行 print(stdout.read(), file=target_f) ^ SyntaxError: invalid syntax
    • 您可能正在使用 python 2,所以将此行替换为:target_f.write(stdout.read())
    • 请提供您当前的完整代码和错误信息
    猜你喜欢
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多