python子进程API的一个最简restapi包装器。
Flask-Shell2HTT的Python项目详细描述
烧瓶-Shell2HTTP
{a4{python包装器作为一个最小的HTTP/API扩展。在
- 将任何命令行工具转换为REST API服务。
- 通过flask的端点,使用动态参数、文件上传、回调函数功能,异步、安全地执行预定义的shell命令。在
- 为二进制到二进制/HTTP通信、开发、原型设计、远程控制和more而设计。在
用例
- 将在成功的POST请求上运行的脚本设置为您选择的端点。见Example code。在
- 将基本命令映射到端点并向其传递动态参数。见Example code。在
- 也可以在一个命令中处理多个上载的文件。见Example code。在
- 如果在微型容器中分布了不同的二进制文件,这对于内部docker-to-docker通信非常有用。见real-life example。在
- 您可以定义回调函数/使用信号来侦听进程完成情况。见Example code。
- 可能需要向回调函数传递一些额外的上下文?在
- 可能在完成时截取并更新结果?见Example code
- 您还可以将View Decorators应用于公开的端点。见Example code
- 目前,所有命令都是异步运行的(默认超时为3600秒),所以结果不能直接获得。在将来的版本中,可能会为立即返回的命令提供一个选项。在
Note: This extension is primarily meant for executing long-running shell commands/scripts (like nmap, code-analysis' tools) in background from an HTTP request and getting the result at a later time.
文件
阅读Quickstart 从documentation开始!在
我强烈推荐Examples部分。在
快速入门
依赖性
- Python:
>=v3.6
- Flask
- Flask-Executor
安装
$ pip install flask flask_shell2http
示例程序
创建一个名为app.py
的文件。在
使用$ flask run -p 4000
运行应用程序服务器。在
通过<;10行代码,我们成功地将shell命令echo
映射到端点/commands/saythis
。在
进行HTTP调用
本节演示如何通过HTTP调用/执行刚刚在上面的example中映射的命令。在
$ curl -X POST -H 'Content-Type: application/json' -d '{"args": ["Hello", "World!"]}' http://localhost:4000/commands/saythis
或使用python的requests模块,
# You can also add a timeout if you want, default value is 3600 secondsdata={"args":["Hello","World!"],"timeout":60}resp=requests.post("http://localhost:4000/commands/saythis",json=data)print("Result:",resp.json())详细信息>
Note: You can see the JSON schema for the POST request here.
返回JSON
{"key":"ddbe0a94","result_url":"http://localhost:4000/commands/saythis?key=ddbe0a94","status":"running"}
然后使用这个key
可以查询结果,或者直接转到result_url
$ curl http://localhost:4000/commands/saythis?key=ddbe0a94
返回JSON格式的结果
{"report":"Hello World!\n","key":"ddbe0a94","start_time":1593019807.7754705,"end_time":1593019807.782958,"process_time":0.00748753547668457,"returncode":0,"error":null,}
灵感
它最初是为了方便地与Intel Owl集成各种命令行工具,我正在将其作为googlesummer of Code的一部分进行开发。在
这个名字的灵感来自于msoap/shell2http的那些了不起的人。在
- 项目
标签: