5 个版本
0.1.4 | 2020年10月19日 |
---|---|
0.1.3 | 2020年9月28日 |
0.1.2 | 2020年9月9日 |
0.1.1 | 2020年9月9日 |
0.1.0 | 2020年9月1日 |
#165 in #stdin
16KB
244 行
此仓库已弃用
库名已更改为 ssvm_process_interface。
请关注新的 crate 以获取未来版本。
Rust Process Interface Library
一个为 Rust 到 WebAssembly 开发者提供语法库,以便在他们的 Wasm 在 SecondState 的 SSVM 上执行时运行命令功能。
从高层次概述来看,我们实际上是在构建一个进程接口,该接口将允许本地操作系统(SSVM 运行在其上)在运行时执行中发挥作用。具体来说,在 Wasm 执行过程中,执行带参数和环境的命令。
如何使用此库
Rust 依赖项
开发者将 rust_process_interface_library
crate 作为依赖项添加到他们的 Rust -> Wasm
应用程序中。例如,将以下行添加到应用程序的 Cargo.toml
文件中。
[dependencies]
rust_process_interface_library = "^0.1.3"
开发者将 Command
模块从 rust_process_interface_library
带入他们的 Rust -> Wasm
应用程序代码的作用域中。例如,将以下代码添加到他们的 main.rs
文件顶部。
use rust_process_interface_library::Command;
使用程序名称执行命令
开发者可以使用如下语法执行命令,例如使用 std::process::Command
。编译后,输出目标 Wasm 文件将包含有关运行外部命令的宿主函数导入。
创建 Command 对象
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
官方 crate 可在 crates.io 上找到。