0

torデーモンと通信するpythonがいくつかあります。ここでは、デーモンにシャットダウンを指示します。

from stem import Signal
from stem.control import Controller

def shutDownTor():
    with Controller.from_port(port=portNum) as controller:
        controller.signal(Signal.SHUTDOWN)

withステートメントを使用しているのは、学習から盗んでいるコードもそうしているためです。withコードは正常に動作しますが、ステートメントを使用する意味があるかどうか疑問に思っています。

ファイルを開くために使用すると、または割り込みwithがあってもファイルが確実に閉じられることを私は知っています。しかし、この場合、不要なタブを追加しているExceptionだけのようです。with変数controllerは名前空間内にも残されます。

4

2 に答える 2

1

ステートメントを削除したい場合はすべてwithを自分で処理する必要がありますopencloseexception

これにより、次の結果が得られます。

  try:
    controller = Controller.from_port()
  except stem.SocketError as exc:
    print("Unable to connect to tor on port 9051: %s" % exc)
    sys.exit(1)
  finally:
      controller.close()

結果は同じで、「不要なタブ」を引用します。

そのすべての結果を認識し、準備ができている場合は、すべてをスキップできます ( closeopenおよび を処理します) 。exception

于 2020-01-04T19:14:34.543 に答える
1

Controllerインポート元のクラスstemは、それ自体がTor プロトコルへのソケット接続のラッパーであるラッパーです。したがって、コードで を使用する場合は、指定されたポートとの接続を開くために使用します。が開いたり閉じたりするのと同じように、を取り除きたい場合は自分で接続を開いたり閉じたりする必要があります。ControlSocketwithfilewith

于 2020-01-04T19:16:56.757 に答える