大家好,今天要帶各位做的事情非常有趣,我們要用 Rust 呼叫一支 python 的翻譯程式,強者我朋友寫的中翻英的深度學習程式。
首先我們需要準備一些前置作業,請先到這個專案Chinese2English_Seq2Seq_Attention
如果沒有用過 python 的同學可能要稍微摸索一下試著照著步驟把程式執行起來,不過各位不需要下訓練指令因為已經有訓練好的模型了,當然有興趣的同學可以自己訓練看看但會需要一段時間。
如果準備好了我們就開始試試看怎麼用 Rust 呼叫這支程式吧!
如果還沒看過這篇怎麼快速架 rust web service 的同學建議先看看會比較好,因為我們會延續那一篇的程式來進行。
首先我們先用 Rust 本身就有的 command 程式來執行 python,
use std::process::Command;
use std::io::{self, Write};
fn main() {
call_python("湯姆累了。");
}
fn call_python(value:&str) {
let mut translate = Command::new("python3");
translate.arg("run_nn.py").arg("translate").arg(value);
translate.current_dir("/Users/liyanxin/Life/myprojects/Chinese2English_Seq2Seq_Attention");
let output = translate.output().expect("failed to execute process");
io::stdout().write_all(&output.stdout).unwrap();
io::stderr().write_all(&output.stderr).unwrap();
}
Command::new
後面就是 cli 的指令 arg
是該指令的參數,最後 current_dir
是要執行程式的位置要記得修改成你自己的路徑。
最後執行有成功的話應該會看到像這樣,
所以 Rust 是可以靈活的呼叫其他的程式的尤其若是 C/C++ 的整合性更好(似乎可以直接共用記憶體?),不過筆者對這也還不是很熟還在摸索,像是今天本來要連 API 一起搞定但是發現沒那麼簡單。
果然事情不像傻人想的一樣啊,還是不夠熟悉 Rust,不過我會繼續研究的!
那麼今天就先告一個段落吧~