【问题标题】:Is there a way to suppress Python M2Crypto's RSA.gen_key output?有没有办法抑制 Python M2Crypto 的 RSA.gen_key 输出?
【发布时间】:2012-08-01 20:15:47
【问题描述】:

我正在使用 Python M2Crypto 包生成 RSA 密钥。

>>> import M2Crypto
>>> rsa = M2Crypto.RSA.gen_key (2048, 65537)
.............................................................+++
............................+++
>>>

注意“openssl 的东西”。为了抑制写入标准输出/错误,我通常会这样做:

sys.stdout = open(os.devnull, 'w')
sys.stderr = open(os.devnull, 'w')

在这种情况下没有效果。我假设这与 M2Crypto 包装 OpenSSL 的方式有关。

有没有办法阻止它?

【问题讨论】:

    标签: python m2crypto


    【解决方案1】:

    我查看了源代码 /M2Crypto/RSA.py,发现了您的问题,然后意识到我可以只阅读文档。 总是先检查文档!!!

    根据docs for RSA.gen_keygen_key 有一个名为callback 的可选参数,它允许您指定在调用gen_key 时调用的函数(表面上是为了向用户提供反馈)。此回调的默认值将内容打印到stdout。将您的函数调用更改为:

    >>> rsa = M2Crypto.RSA.gen_key (2048, 65537, callback=lambda x, y, z:None) 
    

    它应该可以解决问题。

    编辑

    以下是来自 M2PyCrypto 源的相关代码。我添加的评论。

    def keygen_callback(p, n, out=sys.stdout): #sys.stdout is bound to `out` at definition time
        """
        Default callback for gen_key().
        """
        ch = ['.','+','*','\n']
        out.write(ch[p])
        out.flush()
    
    
    def gen_key(bits, e, callback=keygen_callback): #keygen_callback is bound to `callback`
        #other code...
    

    【讨论】:

    • 谢谢!方法定义中的 out=sys.stdout 分配是在 python 中加载模块时完成的,而不是在调用方法时完成的?我仍然不确定为什么将 sys.stdout 设置为 /dev/null 并没有停止输出。
    • @Cory 这正是在函数定义时设置默认参数值的情况。请参阅 this answer 到一个(有些相关的)概念。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 2010-09-16
    • 1970-01-01
    • 2010-10-28
    • 2013-12-13
    相关资源
    最近更新 更多