2017-07-31 1 views
0

J'ai fait un script en utilisant paramiko. Mon script fonctionne à l'aide de la connexion ssh, du fichier de sortie et de l'impression du fichier.Comment lire un fichier avec paramiko?

Quand j'exécuter le script, je reçois l'erreur suivante:

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

Mon script,

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

Toute pensée pourquoi cette erreur se produit basé sur mon script?

Répondre

0

La cible par défaut pour print est sys.stdout, que vous avez redirigé et fermé 4 lignes au-dessus de la tentative print. Au lieu de rediriger sys.stdout simplement dire print quel est votre cible désirée (ou utiliser la méthode de write le fichier):

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

Merci. Mais votre script a eu une erreur. Fichier "9.brocade.py", ligne 26 print (stdout.read(), file = target_f) ^ SyntaxError: syntaxe invalide – KJ9

+0

Vous utilisez probablement python 2, remplacez donc cette ligne par: 'target_f.write (stdout.read()) ' – Yigal

+0

même erreur s'est produite – KJ9