使用Rust std :: process :: Command安装NPM软件包

时间:2019-08-01 13:22:13

标签: rust npm-install

我正在尝试以编程方式将NPM软件包安装为Rust程序的一部分。

我正在使用std::process::Command结构,并且可以使用以下命令成功运行Node:

pub fn check_for_node(&mut self) -> Result<(), Box<dyn Error>> {
    println!("Node Version: ");
    let node = process::Command::new("node")
        .arg("-v")
        .status()?;

    self.node_is_installed = node.success();
    Ok(())
}

上面的代码返回:

Node Version:
v10.15.1

没有错误。

但是,当我跑步时:

pub fn install_puppeteer(&mut self) -> Result<(), Box<dyn Error>> {
    if self.node_is_installed {
        let npm = process::Command::new("npm")
            .arg("install")
            .arg("puppeteer")
            .status()?;
        self.puppeteer_is_installed = npm.success();
    }
    Ok(())
}

我得到了错误:

  

线程'main'在一个Result::unwrap()值上惊慌地叫'Err:Os {代码:2,种类:NotFound,消息:“系统找不到指定的文件。” }',src \ libcore \ result.rs:999:5

如果我手动运行npm -v,则会打印6.4.1,因此我知道已安装NPM。

是否有任何理由std::process::Command适用于Node而不适用于NPM,是否有任何解决方法?

1 个答案:

答案 0 :(得分:0)

通过运行以下命令之前,我可以通过将工作目录更改为import matplotlib.pyplot as plt import numpy as np import pandas as pd from helpers import show_model from pomegranate import State, HiddenMarkovModel, DiscreteDistribution model = HiddenMarkovModel(name='Example Model') #Emission probabiliy of distributions, p(umbrella|weather) sunny_emission = DiscreteDistribution({'yes':0.1, 'no':0.8}) sunny_state = State(sunny_emission, name='Sunny') rainy_emission = DiscreteDistribution({'yes':0.8, 'no':0.2}) rainy_state = State(rainy_emission, name='rainy') model.add_states(sunny_state, rainy_state) assert rainy_emission.probability('yes') == 0.8, "The director brings his umbrella with probability 0.8 on rainy days" print("looks good so far") model.add_transition(model.start, sunny_state, 0.5) model.add_transition(model.start, rainy_state, 0.5) model.add_transition(sunny_state, sunny_state, 0.8) # 80%sunny days model.add_transition(rainy_state, rainy_state, 0.2) # 20% rainy days model.add_transition(rainy_state, rainy_state, 0.6) model.add_transition(rainy_state, sunny_state, 0.4) model.bake() assert model.edge_count() == 6, "There should be two edges from model.start, two from Rainy, and two from Sunny" assert model.node_count() == 4, "The states should include model.start, model.end, Rainy, and Sunny" 来解决此问题:

C:\Program Files\nodejs

将工作目录更改为Node安装路径后,我能够成功运行:

let npm = Path::new("C:\Program Files\nodejs");
assert!(env::set_current_dir(&npm).is_ok());

我在Windows上,但是要跨平台制作此答案,可以使用以下代码:

 let npm = process::Command::new("npm.cmd")
      .arg("install")
      .arg("-g")
      .arg("puppeteer")
      .status()?;
相关问题