Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PySFTP/Paramiko异常泄漏到stderr_Python_Exception_Paramiko_Stderr_Pysftp - Fatal编程技术网

Python PySFTP/Paramiko异常泄漏到stderr

Python PySFTP/Paramiko异常泄漏到stderr,python,exception,paramiko,stderr,pysftp,Python,Exception,Paramiko,Stderr,Pysftp,我试图捕获paramiko异常,但它们仍然被写入stderr 有没有办法停止在那里写作 编辑:甚至在帕拉米科介入之前就发生了: import pysftp try: pysftp.Connection(host="localhost") except Exception as e: print(e) 结果: 具有适当SFTP参数的示例: 更新: $ pipenv graph ... pysftp==0.2.9 - paramiko [required: >=1.

我试图捕获
paramiko
异常,但它们仍然被写入stderr

有没有办法停止在那里写作

编辑:甚至在帕拉米科介入之前就发生了:

import pysftp

try:
    pysftp.Connection(host="localhost")
except Exception as e:
    print(e)
结果:

具有适当SFTP参数的示例:

更新:

$ pipenv graph
...
pysftp==0.2.9
  - paramiko [required: >=1.17, installed: 2.6.0]
...

$ pipenv run python
Python 3.7.3 (default, Jul 19 2019, 11:21:39)
[Clang 11.0.0 (clang-1100.0.28.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pysftp
>>> try:
...     pysftp.Connection(host="localhost")
... except Exception as e:
...     print(e)
...
No hostkey for host localhost found.
Exception ignored in: <function Connection.__del__ at 0x10f7e8268>
Traceback (most recent call last):
  File "/Users/andrei/Work/try/.venv/lib/python3.7/site-packages/pysftp/__init__.py", line 1013, in __del__
    self.close()
  File "/Users/andrei/Work/try/.venv/lib/python3.7/site-packages/pysftp/__init__.py", line 784, in close
    if self._sftp_live:
AttributeError: 'Connection' object has no attribute '_sftp_live'
>>>
$pipenv图形
...
Pysfp==0.2.9
-paramiko[必需:>=1.17,已安装:2.6.0]
...
$pipenv运行python
Python 3.7.3(默认值,2019年7月19日,11:21:39)
关于达尔文的[Clang 11.0.0(Clang-1100.0.28.3)]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>导入PYSTFP
>>>尝试:
...     pysftp.Connection(host=“localhost”)
... 例外情况除外,如e:
...     打印(e)
...
找不到主机localhost的主机密钥。
在中忽略异常:
回溯(最近一次呼叫最后一次):
文件“/Users/andrei/Work/try/.venv/lib/python3.7/site packages/pysftp/_init__.py”,第1013行,在_del中__
self.close()
文件“/Users/andrei/Work/try/.venv/lib/python3.7/site packages/pysftp/_init__.py”,第784行,关闭
如果自启动:
AttributeError:“Connection”对象没有属性“\u sftp\u live”
>>>

我想首先指出,PySFTP()已经有3年没有维护了(或者已经被移动到了另一个位置,到目前为止,这个位置是保密的:)

我重现了这个问题。下面是更详细的代码版本

代码00.py:

#/usr/bin/env蟒蛇3
导入系统
导入PYSTFP
导入回溯
def总管(argv):
如果argv else为“localhost”,则hostname=argv[0]
打印(“正在尝试连接到{0:s}…”。格式(主机名))
尝试:
打印(“--------------在conn----------之前”)
conn=pysftp.Connection(主机=主机名)
打印(“----连接后------------”)
除:
打印(“exc打印前----------------------”)
traceback.print_exc()
打印(exc打印后的----------------)
最后:
打印(“--------------最后------------”)
打印(“--try/except/finally------”)
如果名称=“\uuuuu main\uuuuuuuu”:
打印(“Python{0:s}{1:d}位在{2:s}.format(“.join(sys.version.split(“\n”))中的项的item.strip()),如果sys.maxsize>0x100000000,则为64,否则为32,sys.platform))
打印(“pysftp版本:{0:s}\n.”格式(pysftp.\uuuuuu版本)
main(sys.argv[1:])
打印(“\n完成”)
输出

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q058110732]>“e:\Work\Dev\VEnvs\py\u 064\u 03.07.03\u test0\Scripts\python.exe”code00.py
Python 3.7.3(v3.7.3:ef4ec6ed12,2019年3月25日,22:22:05)[MSC v.1916 64位(AMD64)]win32上的64位
pysftp版本:0.2.9
正在尝试连接到本地主机。。。
----------康涅狄格州前----------
e:\Work\Dev\VEnvs\py\u 064\u 03.07.03\u test0\lib\site packages\pysftp\\uuuuu init\uuuuuu.py:61:UserWarning:未能从C:\Users\cfati\.ssh\known\u主机加载主机密钥。您需要显式加载主机密钥(cnopts.HostKeys.load(filename))或禁用主机密钥检查(cnopts.HostKeys=None)。
警告。警告(wmsg、UserWarning)
----------exc打印前----------
回溯(最近一次呼叫最后一次):
文件“code00.py”,第13行,主
conn=pysftp.Connection(主机=主机名)
文件“e:\Work\Dev\VEnvs\py\u 064\u 03.07.03\u test0\lib\site packages\pysftp\\uuuuu init\uuu.py”,第132行,在\uu init中__
self.\u t连接['hostkey']=self.\u cnopts.get\u hostkey(主机)
文件“e:\Work\Dev\VEnvs\py\u 064\u 03.07.03\u test0\lib\site packages\pysftp\\uuuuuuuuu init\uuuuuuuuu.py”,第71行,在get\u hostkey中
引发SShexException(“未找到主机%s的主机密钥”。%host)
paramiko.ssh_exception.SSHException:找不到主机localhost的主机密钥。
----------exc打印后----------
在中忽略异常:
回溯(最近一次呼叫最后一次):
文件“e:\Work\Dev\VEnvs\py\u 064\u 03.07.03\u test0\lib\site packages\pysftp\\uuuuuuuuuu init\uuuuuuuu.py”,第1013行,在__
self.close()
文件“e:\Work\Dev\VEnvs\py\u 064\u 03.07.03\u test0\lib\site packages\pysftp\\uuuu init\uuu.py”,第784行,关闭
如果自启动:
AttributeError:“Connection”对象没有属性“\u sftp\u live”
----------最后----------
----------尝试/除外/最后----------
完成。
这是一个PySTFP错误:

  • 已构造连接对象(\uuuu new\uuuu)
  • 将调用初始值设定项(uu init_uu)
  • 初始值设定项中的某个位置发生异常
  • 不执行异常后的行
  • 当对象(自动)被垃圾收集时(当它超出范围时,在except块的末尾),在其close方法(由析构函数(_del__)调用)中,会引用一些属性
  • 但由于这些属性初始化发生在#2.2.中的行(引发异常)之后,因此它们从未初始化,因此它们的引用会引发AttributeError
  • 修复方法很简单:在初始值设定项开始时,将属性初始化为一些默认值,这样,如果出现上述情况,它们的引用就不会出现问题

    我注意到您已经提交了一个关于BitBucket的问题

    考虑到:

    • 我不是一个白痴专家
    • 我没有权限(我既不能推送也不能提交拉取请求)
    我创建了自己的回购协议(基于上述协议),并将更改推送到:(到目前为止只有一次提交)

    输出(对pip安装的文件手动应用修复程序后):

    [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q058110732]>“e:\Work\Dev\VEnvs\py\u 064\u 03.07.03\u test0\Scripts\python.exe”code00.py
    Python 3.7.3(v3.7.3:ef4ec6ed12,2019年3月25日,22:22:05)[MSC v.1916 64位(AMD64)]win32上的64位
    pysftp版本:0.2.9
    正在尝试连接到本地主机。。。
    ----------康涅狄格州前----------
    e:\Work\Dev\VEnvs\py\u 064\u 03.07.03\u test0\lib\site packages\pysftp\\uuuuu init\uuuuuu.py:61:UserWarning:未能从C:\Users\cfati\.ssh\known\u主机加载主机密钥。您需要显式加载主机密钥(cnopts.HostKeys.load(filename))
    
    import paramiko
    
    host,port = "example.com",22
    transport = paramiko.Transport((host,port))
    username,password = "bar","foo"
    transport.connect(None,username,password)
    sftp = paramiko.SFTPClient.from_transport(transport)
    
    client = pk.SSHClient()
    client.set_missing_host_key_policy(pk.AutoAddPolicy())
    client.connect(hostname=ip, port=22, username=userName, password=pwd)
    ftp_client = client.open_sftp()