我正在尝试以编程方式将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,是否有任何解决方法?
答案 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()?;