#操作系统 #wasm-edge #命令 #进程 #本地 #运行 #接口

wasmedge_process_interface

这是一个Rust库,为WebAssembly开发者提供在Wasm在WasmEdge(原名SSVM)上执行时运行命令功能的语法。

2 个版本

0.2.1 2021年10月19日
0.2.0 2021年5月19日

#445操作系统

自定义许可证

16KB
261

WasmEdge进程接口

这是一个Rust库,为在WasmEdge(原名SSVM)上执行时提供运行命令功能的语法。

从高层次概述来看,我们实际上正在构建一个进程接口,允许本地操作系统(WasmEdge在其中运行)在运行时执行中发挥作用。具体来说,在Wasm执行过程中执行带有参数和环境值的命令。

如何使用此库

Rust依赖关系

开发者将 wasmedge_process_interface 添加为他们的 Rust -> Wasm 应用的依赖项。例如,将以下行添加到应用程序的 Cargo.toml 文件中。

[dependencies]
wasmedge_process_interface = "^0.2.1"

开发者将 Command 模块从 wasmedge_process_interface 带入他们的 Rust -> Wasm 应用程序的代码中。例如,将以下代码添加到他们的 main.rs 文件顶部。

use wasmedge_process_interface::Command;

使用程序名执行命令

开发者可以使用如下的语法来执行命令,例如使用 std::process::Command。编译后,输出目标Wasm文件将包含有关运行外部命令的宿主函数的导入。

创建命令对象

let mut cmd = Command::new("ls");

追加参数

let mut cmd = Command::new("ls");
cmd.arg("-al");

或者以下内容

let cmd = Command::new("ls").arg("-al");

或者以下内容

let cmd = Command::new("ls").arg("-alF").arg("..");

或者以下内容

let cmd = Command::new("ls").args(&["-alF", ".."]);

追加环境变量

let mut cmd = Command::new("printenv").arg("ONE").env("ONE", "1");

或者以下内容

use std::collections::HashMap;
let mut cmd = Command::new("rusttest");
let mut hash: HashMap<String, String> = HashMap::new();
hash.insert(String::from("ENV1"), String::from("VALUE1"));
hash.insert(String::from("ENV2"), String::from("VALUE2"));
let mut cmd = Command::new("printenv").arg("ENV1").envs(hash);

追加 stdin

let mut cmd = Command::new("python3").stdin("print(\"HELLO PYTHON\")");

或者以下内容

// Consider about the `\n` charactor in stdin strings.
let mut cmd = Command::new("python3").stdin("import time\n").stdin("print(time.time())");

指定执行超时

// Timeout values are in milliseconds.
let mut cmd = Command::new("python3")
              .stdin("from time import sleep\n")
              .stdin("print('PYTHON start sleep 2s', flush=True)\n")
              .stdin("sleep(2)\n")
              .stdin("print('PYTHON end sleep 2s', flush=True)\n")
              .timeout(1000);

执行并获取输出

请记住检查子进程的返回状态。

let out = Command::new("python3")
          .stdin("from time import sleep\n")
          .stdin("import sys\n")
          .stdin("print('stdout: PYTHON start sleep 2s', flush=True)\n")
          .stdin("print('stderr: PYTHON start sleep 2s', file=sys.stderr, flush=True)\n")
          .stdin("sleep(2)\n")
          .stdin("print('stdout: PYTHON end sleep 2s', flush=True)\n")
          .stdin("print('stderr: PYTHON end sleep 2s', file=sys.stderr, flush=True)\n")
          .timeout(1000)
          .output();

println!(" return code : {}", out.status);
println!(" stdout :");
print!("{}", str::from_utf8(&out.stdout).expect("GET STDOUT ERR"));
println!(" stderr :");
print!("{}", str::from_utf8(&out.stderr).expect("GET STDERR ERR"));

Crates.io

官方包在 crates.io 上提供。

没有运行时依赖项