4

getrawtransaction を呼び出すと、ubuntu で popen を使用して bitcoind-cli を呼び出す Python スクリプトを実行すると、多くのトランザクションがある大きなブロックでOSError: [Errno 7] Argument list too longというエラーが表示されます

シェルと python スクリプトの間のバッファの問題だと理解していますか? 単一の引数があります。非常に長いものだと思います

何か他のことを確認する必要がありますか?どうにかしてバッファを大きくすることはできますか、それとも bitcoind と対話する方法を RPC に変更する必要がありますか?

ローカルおよび AWS ubuntu マシンで試してみました

ありがとう

4

2 に答える 2

1

それはあなたのOSの制限です。

>>> 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

あなたの場合、コマンドラインでデータを渡す必要がありますか (代わりにパイプ/ファイル/ソケットなどを使用できますか?)。コマンドライン引数を分割してコマンドを複数回実行できますか? 「mv: 引数リストが長すぎます」</a> の解決を参照してください。

渡された環境が大きすぎる場合、同じエラーが発生する可能性があります。

>>> 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

解決策は、渡された環境をサニタイズして、未使用の大きな環境変数を避けることです。

制限は、カーネル ソースにハードコーディングされている場合があります

于 2016-03-08T18:45:08.740 に答える