1

让我先说一下我并不完全熟悉 Python,但在其他语言的编程方面有丰富的经验。

我正在开发一个允许我将数据包注入 TCP 网络流的工具。这个想法是我的代码充当两个网络端点之间的透明代理。我的代码可以让代理工作,我什至可以解析数据包并自动注入(即检测特定状态并修改/注入数据包),但我的最终目标是涉及用户交互。

我正在努力解决的是如何让网络内容在后台运行,而命令行界面会提示用户输入命令。给出命令时,它可能会执行某种注入。

在 C# 中,我会使用后台工作任务或线程来处理这个问题,然后让 CLI 触发事件,但我不熟悉这种设计通常是如何在 Python 中实现的。我应该如何处理这个?

4

2 回答 2

2

如果您熟悉拥有后台进程和触发事件的模式,您可以在 python 中采用相同的方法。看一下Multiprocessing 模块创建后台进程(从而避免 Global Intepreter Lock 问题)并使用 Pipe 向后台进程发送消息以触发事件

或者,您可以查看诸如Trellis之类的包以采用事件驱动方法,或者可能是 Twisted 框架。我不能代表其中任何一个,因为我从未使用过它们。

希望这可以帮助!

于 2013-05-09T16:00:16.437 回答
1

线程是要走的路(后台工作人员不是一回事吗?)。像这样的东西:

from Queue import Queue
import threading

queue = Queue()

def job():
    while True:
        command = queue.get() # <-- waits until something is in the queue
        # do something with the command

# main thread
t = threading.Thread(target=job)
t.daemon = True
t.start()

while True:
    command = raw_input("---> ")
    queue.put(command)
于 2013-05-09T15:50:24.127 回答