2017-07-31 112 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