1

我正在使用 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 连接的代码永远不会被阻止?

4

1 回答 1

0

这有点远,但我遇到了logging使用线程导致死锁的问题。我无法找到确切的问题(尽管我怀疑使用subprocess; 可能会加剧问题,但我确实通过禁用logging模块的线程支持来解决它。

在激活日志记录之前尝试此操作:

import logging
logging.thread = None

我很想知道这是否能解决您的问题。

于 2012-10-29T13:48:59.163 回答