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您将不得不自己处理所有的open, 。closeexception

这将导致:

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

结果相同,我将引用“不必要的标签”。

如果您知道并准备好承受它的所有后果,您可以跳过所有这些(处理close,open和) 。exception

于 2020-01-04T19:14:34.543 回答
1

Controller您从中导入的类stem是一个包装器ControlSocket它本身就是一个围绕与 Tor 协议的套接字连接的包装器。因此,当您with在代码中使用时,您这样做是为了打开与给定端口的连接。与打开和关闭的方式相同file,如果您想摆脱with.

于 2020-01-04T19:16:56.757 回答