提供一个python 3接口来与沙箱通信(https://github.com/premirlangage/sandbox)

sandbox-api的Python项目详细描述


Build StatuscodecovCodeFactorPyPI VersionPython 3.5+License MIT

用于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

  • 初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将jaxb插件扩展与gradlejaxbplugin一起使用   java Hibernate列表<Object[]>到特定对象   java使用多态性显示arraylist的输出   java水平堆叠卡,带有一定偏移量   java错误:找不到符号方法liesInt()   java客户机/服务器文件收发中的多线程流管理   在java中可以基于访问重载方法吗?   包含空元素的java排序数组   swing Java按钮/网格布局   java BottomNavigationView getmaxitemcount   java空指针异常字符串生成器   java Xamarin升级导致“类文件版本错误52.0,应为50.0”错误   java我正在尝试打印它,而不只是对每一行进行println   Tomcat7中的java是否需要复制上下文。将xml转换为conf/Catalina/locahost以使其生效   带有注入服务的java REST端点在何处引发自定义WebServiceException?   在Java中使用GPS数据   java如何将JFreeChart ChartPanel导出到包含添加的CrosshairOverlay的图像对象?   内置Eclipse期间的Java 8堆栈溢出   java在GWT编译的JavaScript中如何表示BigDecimal