提供一个python 3接口来与沙箱通信(https://github.com/premirlangage/sandbox)
sandbox-api的Python项目详细描述
用于wims的adm/raw模块的python api
与sandbox通信的python 3接口
安装
最新的稳定版本可在PyPI:
pip install sandbox-api
或者来源:
git clone https://github.com/qcoumes/sandbox-api
cd sandbox-api
python3 setup.py install
用法
沙盒api很容易使用,您只需要导入沙盒并创建 具有服务器URL的实例:
fromsandbox_apiimportSandboxs=Sandbox("http://www.my-sandbox.com")
规范和库
沙盒的规格和安装的库可用作属性:
s.cpu{'count':1,'period':1000,'shares':1024,'quota':0,'name':'Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz'}s.containers{'total':5,'running':0,'available':5}s.python3'3.7.3's.python2'2.7.16'
在第一次访问时从沙盒中检索“url”以外的属性,属性为 分为两类:规范和库。一个类别的每个属性都是 第一次访问相应类别的属性时检索。
这些属性是通过http请求获取的,这可能需要一些时间(不应该更多 超过2秒),特别是对于库类别。
注意,属性是缓存的(除了“containers”),随后访问一个类别 是瞬间的。
可用属性为:
- 规格
- 沙盒版本(str):沙盒的版本,格式为“major.minor.patch”。
- docker_version(str):沙盒使用的docker版本,格式为“major.minor.patch”
- containers(dict):包含沙盒上运行的容器的状态的dict。
- 内存(dict):沙盒上每个容器的内存限制。
- environ(dict):容器中使用的环境变量。
- execute_timeout(union[int,float]):在“execute/”请求超时之前的时间(秒)。
- 过期(int):环境在沙盒上过期之前的时间。
- 图书馆
- python3(str):沙盒使用的python3版本,格式为“major.minor.patch”。
- python2(str):沙盒使用的python2版本,格式为“major.minor.patch”。
- Java(str):沙盒使用的Java版本,格式为“jdk major.minor”。
- gcc(str):沙盒使用的gcc版本,格式为“major.minor.patch”。
- gpp(str):沙盒使用的g++版本,格式为“major.minor.patch”。
- perl(str):沙盒使用的perl版本,格式为“major.minor.patch”。
- postgres(str):沙盒使用的postgres版本,格式为“major.minor”。
- 库(dict):dict包含:
- 系统(dict):已安装的包(dpkg)。
- C(dict):已安装的库及其版本。
- python(dict):已安装的python模块。
- perl(dict):安装的perl模块。
- bin(dict):沙盒路径中的每个可用命令
沙盒电流负载
可以使用usage()
方法获得沙盒的当前负载。
它返回一个介于0和1之间的浮点数,表示沙盒上的当前电荷,0表示
沙盒当前未使用,1表示它已使用满容量,“execute/”请求将
可能会耽搁。
s.usage()0.2
下载环境和文件
您可以通过download(uuid, path=None)
方法下载文件或环境。uuid
与沙盒上环境的ID相对应。
如果只提供了uuid,整个环境将被下载,如果还提供了path,只有 将下载与环境中的路径对应的文件。
下载的对象作为io.BytesIO
返回。
执行命令
使用execute(config, environ=None)
方法在沙盒上执行命令。配置
必须是与定义的有效配置对应的字典
here,
如果提供environ,则它必须是实现.read()
(例如file object
)的二进制对象,或者
io.BytesIO
)对应于有效环境的位置0(同样,更多信息
here)。
返回的值是与响应的json对应的字典:
s.execute({"commands":["echo $((2+2))"]}){'status':0,'execution':[{'command':'echo $((2+2))','exit_code':0,'stdout':'4','stderr':'','time':0.28589797019958496}],'total_time':0.2871053218841553}
例外情况
由于沙盒api依赖于http,任何状态代码大于或等于300的响应都将引发
收到的响应(一个requests.Response
对象)对应的异常Sanbox{STATUS}
在异常的response
属性中可用。
所有这些异常都继承SandboxError
。
fromsandbox_apiimportSandboxError,Sandbox404try:file=s.download("872b604c-9cce-42e2-8888-9a0311f3a724","unknown")exceptSandbox404:print("'unknown' does not exists in environment '872b604c-9cce-42e2-8888-9a0311f3a724'")exceptSandboxErrorase:print("Sandbox responded with a '%d' status code"%e.response.status_code)
更改日志
0.1
- 初始版本