2017-07-31 75 views
0

我用paramiko做了一些脚本。 我的脚本使用ssh连接,输出文件和打印输出文件。如何用paramiko读取文件?

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

Traceback (most recent call last): File "test.py", line 31, in print line ValueError: I/O operation on closed file

我的剧本,

#!/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) 

任何思考为什么这个错误的发生基于我的脚本?

回答

0

print的默认目标是sys.stdout,您将其重定向并关闭了4行,超过了尝试的print。而不是重定向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() 
+0

谢谢。但是你的脚本发生了错误。文件“9.brocade.py”,第26行 print(stdout.read(),file = target_f) ^ SyntaxError:无效语法 – KJ9

+0

您可能正在使用python 2,因此请将此行替换为:'target_f.write (stdout.read())' – Yigal

+0

发生了同样的错误 – KJ9