Rust中执行node.js/python/cmd进程:Command::spawn与output和status执行方式区别


发布者 ourjs  发布时间 1657520365297
关键字 Rust  Node.JS  Python 

在rust中可通过Command::new来调用node.js、shell、python或其它进程,

1. 使用 spawn

将命令作为子进程执行,并返回它的句柄。 默认情况下,标准输入、标准输出和标准错误是从父级继承的,比如:

use std::process::Command;

Command::new("ls")
        .spawn()
        .expect("ls command failed to start");

此种情况下子进程不会阻塞父进程,如果父进程或所在函数退出,进程可能会被自动回收。

2. 使用 output

  let output = Command::new("/Users/.../node/mac-darwin/node")
    .arg("/Users/.../src/app.js")
    .output()
    .unwrap();

将命令作为子进程执行,等待它完成并收集其所有输出。

默认情况下,会捕获 stdout 和 stderr(并用于提供结果输出)。标准输入不是从父进程继承的,子进程从标准输入流中读取的任何尝试都将导致流立即关闭。

3. 使用 status

作为子进程执行命令,等待它完成并收集它的状态。 默认情况下,标准输入、标准输出和标准错误是从父级继承的。

use std::process::Command;

let status = Command::new("/bin/cat")
                     .arg("file.txt")
                     .status()
                     .expect("failed to execute process");

println!("process finished with: {status}");

assert!(status.success());

作为子进程执行命令,等待它完成并收集它的状态。 默认情况下,标准输入、标准输出和标准错误是从父级继承的。









  开源的 OurJS
OurJS开源博客已经迁移到 OnceOA 平台。

  关注我们
扫一扫即可关注我们:
OnceJS

OnceOA