我正在使用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(主机名,用户,密码)上挂起并写入stderr日志,就像疯狂最终杀死我的代码正在运行的VM一样。
特别是paramiko挂在这一行:
t.start_client()
在client.connect方法中。 paramiko日志中没有任何有用的东西,stderr充满了没有描述或回溯的错误。
研究这个问题我遇到了“有一个可用的导入锁,所以当子线程尝试另一个导入时它可以无限期地阻止它”我如何确保打开sftp连接的代码永远不会被阻止?
答案 0 :(得分:0)
这是一个很长的镜头,但是我遇到了logging
使用线程导致死锁的问题。我无法跟踪确切的问题(尽管我怀疑使用subprocess
可能会加剧;但我确实通过禁用logging
模块的线程支持来解决它。
在激活日志记录之前尝试此操作:
import logging
logging.thread = None
我有兴趣知道这是否能解决您的问题。