J'écris ma première application de bureau et je suis aux prises avec des instances de classe. Cette application est un programme FTP simple utilisant paramiko. Ce que j'ai mis en place jusqu'à présent est un connection.py qui ressemble à ceci ...Problème de connexion Paramiko
#connect.py
import user, db
import paramiko, time, os
paramiko.util.log_to_file('paramiko-log.txt')
class Connection:
def __init__(self):
#Call DB Functions
database = db.Database()
#Set Transport
self.transport = paramiko.Transport((user.hostname, user.port))
#User Credentials
username = user.username
password = user.password
self.transport.connect(username = username, password = password)
self.sftp = paramiko.SFTPClient.from_transport(self.transport)
print "Set your credentials in user.py for now!"
msg = "Connecting as: %s, on port number %d" % (user.username, user.port)
print msg
def disconnect(self):
print "Closing connection..."
self.sftp.close()
self.transport.close()
print "Connection closed."
Assez simple. Connectez-vous et déconnectez. Ce fichier connect.py est importé dans un main.py (ce qui est mon IUG)
#main.py
import connect
from PySide import QtCore, QtGui
class Window(QtGui.QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
windowWidth = 550
windowHeight = 350
self.establishedConnection = ""
connectButton = self.createButton("&Connect", self.conn)
disconnectButton = self.createButton("&Disconnect", self.disconnect)
grid = QtGui.QGridLayout()
grid.addWidget(connectButton, 3, 3)
grid.addWidget(disconnectButton, 4, 3)
grid.addWidget(self.createList(), 1, 0, 1, 4)
self.setLayout(grid)
self.resize(windowWidth, windowHeight)
self.setWindowTitle("FTP Program")
def conn(self):
connection = connect.Connection()
self.establishedConnection = connection
def disconnect(self):
self.establishedConnection.disconnect()
def createButton(self, text, member):
button = QtGui.QPushButton(text)
button.clicked.connect(member)
return button
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
gui = Window()
gui.show()
sys.exit(app.exec_())
La question se déconnecte. Je pensais que __init__
créerait une instance de la classe Connection()
. Si vous regardez sur main.py vous pouvez voir que j'ai essayé de créer la variable self.connectionEstablished
afin d'enregistrer l'objet afin que je puisse appeler déconnecter dessus plus tard.
Où est-ce que je me trompe? Je suis relativement nouveau sur python et d'autres langages non-web (je passe la majeure partie de mon temps à écrire des applications RoR et php).
Aucune erreur ne s'affiche à tout moment et j'ai commencé cette application comme une application de terminal, donc je sais que connect.py fonctionne comme prévu.
Edit: Donc, je suppose que Senderle a reçu un message de fermeture de la connexion, ce que j'aimerais voir, mais je ne le suis pas. Je vais marquer une meilleure réponse si je vois quelque chose qui résout mon problème. Edit Résolu: Poussez connect.py et main.py dans un seul fichier pour simplifier les choses. Et pour une raison qui a résolu les choses. Alors, qui sait ce qui se passe. Je vais toujours attendre la meilleure réponse. Si quelqu'un peut me dire pourquoi je ne peux pas avoir un fichier partagé comme ça alors je suis tout ouïe.
Quand conn() est appelé? La fonction init ressemble à la définition de la variable et à la chaîne vide. Sauf si conn() est appelé, self.establishedConnection ne sera jamais configuré. –
Quel est le problème avec la déconnexion? Vous dites "aucune erreur n'est affichée à tout moment", mais vous ne dites pas ce qui ne va pas. – sth
@Karl R: On dirait que conn() est appelé via le widget 'connectButton = self.createButton (" & Connect ", self.conn)'. – senderle