我正在使用paramiko打开SFTP连接以访问远程文件。我以下所有代码在内置功能中似乎只有在我没有启用paramiko的日志记录时工作:
paramiko.util.log_to_file( 'paramiko.log' )
因此,当我在文件中没有上述代码行时,以下代码有效:
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy( paramiko.AutoAddPolicy() )
client.connect( hostname,user, password)
sftp = client.open_sftp()
file = sftp.open( fpath, mode='r', bufsize=1 )
否则,python将挂在此行上 client.connect(hostName,user,passwere),并将其写入stderr日志,就像疯狂一样,最终杀死了我的代码正在运行的VM。
特别是Paramiko挂在这条线上:
t.start_client()
在client.connect方法中。Paramiko日志中没有任何有用的东西,STDERR充满了没有描述或追溯的错误。
在研究这个问题时,我遇到了"有一个单个导入锁,因此当孩子线程尝试另一个导入时,它可以无限期地阻止它"我如何确保打开SFTP连接的代码永远不会被阻止?
这有点远,但是我对logging
使用导致僵局的线程有问题。我无法跟踪确切的问题(尽管我怀疑它可能因使用subprocess
而加剧了;但是我确实通过禁用logging
模块的线程支持来解决它。
在激活记录之前先尝试一下:
import logging
logging.thread = None
我有兴趣知道这是否解决了您的问题。