我正在使用 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,password)并疯狂地写入 stderr 日志,最终杀死我的代码正在运行的 VM。
特别是 paramiko 挂在这条线上:
t.start_client()
在 client.connect 方法中。paramiko 日志中没有任何有用的信息,stderr 充满了没有描述或回溯的错误。
研究这个问题时我遇到了“有一个可用的导入锁,所以当子线程尝试另一个导入时,它可以无限期地阻止它”如何确保打开 sftp 连接的代码永远不会被阻止?