【问题标题】:OSError: [Errno 7] Argument list too long on ubuntu, python calling bitcoind-cli with popenOSError:[Errno 7] ubuntu 上的参数列表太长,python 使用 popen 调用 bitcoind-cli
【发布时间】:2014-11-04 12:19:15
【问题描述】:

在 ubuntu 上使用 popen 运行 python 脚本调用 bitcoind-cli,在具有许多事务的大块上,调用 getrawtransaction 时出现错误 OSError: [Errno 7] Argument list too long

我知道这是 shell 和 python 脚本之间的缓冲区问题? 只有一个论点,我想这只是一个很长的论点

需要我检查一下吗? 我可以以某种方式使缓冲区更大,还是应该将与 bitcoind 交互的方法更改为 RPC?

在本地和 AWS ubuntu 机器上尝试过

谢谢

【问题讨论】:

    标签: python popen bitcoind


    【解决方案1】:

    这是您的操作系统限制,例如:

    >>> import os
    >>> os.execl('/bin/ls', 'ls', 'c'*10**7)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python2.7/os.py", line 314, in execl
        execv(file, args)
    OSError: [Errno 7] Argument list too long
    

    在您的情况下是否有必要在命令行上传递数据(您可以使用管道/文件/套接字等代替吗?)?您可以使用拆分的命令行参数多次运行该命令吗?见Solving “mv: Argument list too long”

    如果传递的环境太大,你可能会得到同样的错误:

    >>> os.execle('/usr/bin/env', 'env', {'envvar': 'c'*10**9})
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python2.7/os.py", line 322, in execle
        execve(file, args[:-1], env)
    OSError: [Errno 7] Argument list too long
    

    解决方案是清理传递的环境以避免未使用的大型环境变量。

    The limits might be hardcoded in the kernel source.

    【讨论】:

      【解决方案2】:

      由于你使用的是 Python,所以你能做的最好的事情就是使用 RPC,比如:

      import base64
      import requests
      
      response = requests.post(
          bitcoind_url, 
          data=json.dumps(
              {
                  'method': method,
                  'params': params,
                  'jsonrpc': '2.0',
                  'id': 0,
              }
          ), 
          headers={'content-type': 'application/json', 'Authorization': b'Basic ' + base64.b64encode(rpcuser + b':' + rpcpassword)})
      

      其中params 是特定method 的参数列表。

      您可以从 bitcoind 配置文件中获取rpcuserrpcpassword

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-07
        • 1970-01-01
        • 1970-01-01
        • 2015-07-05
        • 1970-01-01
        • 1970-01-01
        • 2021-02-10
        相关资源
        最近更新 更多