gpt4 book ai didi

python - Paramiko 连接问题

转载 作者:太空宇宙 更新时间:2023-11-03 19:33:10 26 4
gpt4 key购买 nike

我正在编写我的第一个桌面应用程序,并且正在努力处理类实例。这个应用程序是一个使用 paramiko 的简单 ftp 程序。到目前为止我已经设置的是一个connection.py,它看起来像这样......

#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."

非常简单。连接和断开。这个 connect.py 文件正在被导入到 main.py (这是我的 gui)中

#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_())

问题是断开连接。我认为 __init__ 会创建一个 Connection() 类的实例。如果您查看 main.py,您会发现我尝试创建变量 self.connectionEstablished 来保存该对象,以便稍后可以对其调用断开连接。

我哪里出错了?我对 python 和其他非网络语言相当陌生(我大部分时间都在编写 RoR 和 php 应用程序)。

任何时候都不会显示错误,并且我将此应用程序作为终端应用程序启动,因此我确实知道 connect.py 确实按预期工作。

编辑:所以我猜 Senderle 收到了一条连接已关闭的消息,这也是我想看到的,但我没有。如果我看到可以解决我的问题的内容,我会标记为最佳答案。

编辑已解决:将 connect.py 和 main.py 推送到一个文件中以简化操作。出于某种原因,解决了问题。所以谁知道发生了什么事。我仍然会推迟“最佳答案”。如果有人能告诉我为什么我不能有这样的分割文件,那么我洗耳恭听。

最佳答案

我尝试了代码,运行良好。我只做了一些更改。

首先,我不知道“user”和“db”是什么,所以我注释掉了

import user, db

database = db.Database()

并使用我自己的用户名、密码等数据。

其次,PySide 模块无法通过我的包管理器使用,因此我使用了 PyQt4。它不喜欢 grid.addWidget(self.createList(), 1, 0, 1, 4) ,所以我将其注释掉,一切都按预期进行。

进一步的想法:当出现连接错误时,有一些由堆栈跟踪组成的控制台反馈,但仅此而已,并且 self.builtedConnection 仍然是一个字符串,导致 self.builtedConnection.disconnect () 失败。那么也许存在连接问题?

编辑:啊啊啊啊啊,我刚刚看到这个:“任何时候都不会显示错误。”您是从终端运行它还是双击可执行文件?如果您从终端启动它,我敢打赌您会在终端中看到堆栈跟踪。当代码遇到异常时,GUI 不会关闭。

EDIT2:如果加入文件可以解决问题,那么我确信问题与 python 本身没有任何关系。这一定是eclipse的问题。您说 connection.py 最初是一个终端应用程序,因此您必须能够从命令行运行 python 应用程序。尝试以下操作:将 main.py、connect.py 等放在自己的目录中,打开终端,然后运行 ​​python main.py。如果它按预期工作,那么问题与 eclipse 有关。

关于python - Paramiko 连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4762822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com