python - 在 Windows 下将 Flask 作为子进程运行
问题描述
我正在用 python 编写一个工具来与远程 PowerShell 代理(基本上是 PowerShell Empire,但适用于 PS v1)进行交互。我想使用 HTTP(S) 作为代理和用户界面之间命令和输出的传输介质。
为此,我让 Flask 作为子进程运行,然后在主线程中向用户显示一个简单的命令行。这在 Linux 上运行良好,但在 Windows 下我在调用 start 时遇到以下错误Process
:
TypeError("can't pickle _thread.lock objects")
我相信这与Windows如何处理Process
es中的线程有关。任何人都可以建议一种在 Windows 上运行的方法吗?我的代码如下:
from flask import Flask, request
from multiprocessing import Process, Queue
import logging
port = 8080 # TODO: set this from cmdline args
cmds = Queue()
quitting = Queue()
app = Flask(__name__)
@app.route('/', methods=['GET'])
def get_command():
if cmds.empty():
return ''
else:
return cmds.get()
@app.route('/', methods=['POST'])
def get_output():
if request.data.decode() == "quitting":
quitting.put(True)
print("{} ".format(request.data.decode()),end='\n> ')
return ''
if __name__ == "__main__":
log = logging.getLogger('werkzeug')
log.setLevel(logging.ERROR)
t = Process(target=app.run, kwargs={'host': '0.0.0.0'})
t.start()
running = True
while running:
cmd = input("> ")
if cmd == "kill" or cmd =="quit":
print("Waiting for agent to close...")
cmds.put("quit")
while quitting.empty():
pass
t.terminate()
t.join()
running = False
else:
cmds.put(cmd)
解决方案
推荐阅读
- c# - 我如何知道方法不是从基类 C# 派生的
- python - Sublime Text 3 中的 Python 库
- android - 科尔多瓦 inAppBrowser 无法在 android 上运行
- php - 将数组从输入插入到 MySQL PDO
- android - 在不设置 windowIsTranslucent 的情况下在锁屏上创建透明活动
- ruby-on-rails - 跳过对依赖项的验证::destroy
- google-apps-script - Error Showing in Simple Google Apps Script, How to hide
- javascript - Vue.js 组件在 jsp 文件中不起作用
- javascript - node.js JS 堆内存不足错误 - 无论 max-old-space-size 设置如何
- c++ - 将多个函数传递给模板