我有一些与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
甚至留在名称空间中。
答案 0 :(得分:1)
如果您想摆脱 with
语句,则必须处理所有open
,close
和exception
靠你自己。
这将导致:
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
)
答案 1 :(得分:1)
您从Controller
导入的stem
类是ControlSocket
的{{3}},它本身就是Tor协议的wrapper。因此,当您在代码中使用with
时,便可以打开与给定端口的连接。 file
的打开和关闭方式相同,如果要摆脱with
,则必须自己打开和关闭连接。