我想從Python程序中產生一個Rust進程,並將Python的標準輸出重定向到它的標準輸入中。我已經使用了以下功能:如何將輸出從Python進程重定向到Rust進程?
process = subprocess.Popen(["./target/debug/mypro"], stdin=subprocess.PIPE)
,並嘗試使用寫入子:
process.stdin.write(str.encode(json.dumps(dictionnaire[str(index)]))) #Write bytes of Json representation of previous track
我沒有收到拉斯特任何錯誤,但標準輸入似乎沒有采取任何輸入標準輸出根本不打印任何東西。
這裏是我目前運行鏽代碼的版本:
extern crate rustc_serialize;
use rustc_serialize::json::Json;
use std::fs::File;
use std::io;
use std::env;
use std::str;
fn main(){
let mut buffer = String::new();
let stdin = io::stdin();
//stdin.lock();
stdin.read_line(&mut buffer).unwrap();
println!{"{}", buffer};
println!{"ok"};
}
有人可能會對您的問題提出更直接的回答,但同時請讓我建議[ØMQ](http://zeromq.org/)滿足所有進程間通信需求。它附帶了[Python](https://github.com/zeromq/pyzmq)和[Rust](https://github.com/erickt/rust-zmq)的綁定。 – kazemakase
聽起來不錯。我已經把你的問題轉移到了帖子的標題上,這是Stack Overflow所在的位置。接下來,我鼓勵你編輯你的問題,以包含重要的信息:程序*做什麼*以及你期望它做什麼。 – Shepmaster
*我一直無法找到任何使用文件描述符打開管道的方法。* - 除了您的代碼**顯示您做了**:'pipe_in = unsafe {Stdio :: from_raw_fd(fd)}; let mut my_pipe = Pipe :: new(); my_pipe.reader = pipe_in;'。 – Shepmaster