iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 18
0
自我挑戰組

WebAssembly + Rust 的前端應用系列 第 18

[Day 18] Rust Actix Python 程式呼叫 (1)

大家好,今天要帶各位做的事情非常有趣,我們要用 Rust 呼叫一支 python 的翻譯程式,強者我朋友寫的中翻英的深度學習程式。

首先我們需要準備一些前置作業,請先到這個專案Chinese2English_Seq2Seq_Attention

如果沒有用過 python 的同學可能要稍微摸索一下試著照著步驟把程式執行起來,不過各位不需要下訓練指令因為已經有訓練好的模型了,當然有興趣的同學可以自己訓練看看但會需要一段時間。

如果準備好了我們就開始試試看怎麼用 Rust 呼叫這支程式吧!

如果還沒看過這篇怎麼快速架 rust web service 的同學建議先看看會比較好,因為我們會延續那一篇的程式來進行。

使用 Rust 呼叫 python cli

首先我們先用 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 是要執行程式的位置要記得修改成你自己的路徑。
最後執行有成功的話應該會看到像這樣,

https://ithelp.ithome.com.tw/upload/images/20191004/20119807Hd3WMeA4oz.png

總結

所以 Rust 是可以靈活的呼叫其他的程式的尤其若是 C/C++ 的整合性更好(似乎可以直接共用記憶體?),不過筆者對這也還不是很熟還在摸索,像是今天本來要連 API 一起搞定但是發現沒那麼簡單。/images/emoticon/emoticon06.gif

果然事情不像傻人想的一樣啊,還是不夠熟悉 Rust,不過我會繼續研究的!

那麼今天就先告一個段落吧~

最後一樣有問題歡迎發問

/images/emoticon/emoticon07.gif

參考連結

rust Command


上一篇
[Day 17] Rust Actix PART1
下一篇
[Day 19] Rust Actix Python 程式呼叫 (2)
系列文
WebAssembly + Rust 的前端應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言