如何将输出从 Python 进程重定向到 Rust 进程?



我正在尝试从Python程序中生成一个Rust进程,并将Python的标准输出重定向到其标准输入中。我使用了以下功能:

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

我没有收到任何错误,但 Rust 中的标准输入似乎不接受任何输入,标准输出根本没有打印任何内容。

这是我当前运行的 Rust 代码的版本:

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"};      
}

默认情况下process.stdin.write(str.encode(json.dumps(dictionnaire[str(index)]))不添加换行符,因此在 Rust 方面,我从未到达在read_line上制作进程块的行尾。

手动添加它使一切顺利进行。

process.stdin.write(str.encode(json.dumps(dictionnaire[str(index)])+ "n") )

这可能是Python方面的问题

subprocess.run(["cargo run -- " + str(r)], shell=True)

这假设您有一个数字文件描述符,该描述符在forkexec中保持打开状态。生成进程可能会关闭文件描述符,因为它们被标记为CLOEXEC或由于在exec之前显式清理代码。

在尝试将数字文件描述符作为字符串参数传递之前,应确保它们在新进程中保持有效。

更好的方法是使用一些进程生成 API,该 API 允许您在新进程中显式映射文件描述符以打开句柄,或者使用一个 API 来生成与管道绑定 stdin/out 的进程。

相关内容

  • 没有找到相关文章

最新更新