Создайте анонимный unix os_pipe в ржавчине и прочитайте его из python - PullRequest
1 голос
/ 05 апреля 2020

У меня есть программа, которая принимает fd к каналу в качестве аргумента. Для упрощения я моделирую программу python следующим образом:

src/test.py

#!/usr/bin/python3

import os
import sys

fd = int(sys.argv[1])
print("fd:", fd)
r = os.fdopen(fd, 'r')
print("pipe content: ", r.read())

Я создаю трубу и передаю fd следующим образом

src/main.rs

use std::io::Write;
use std::os::unix::io::IntoRawFd;

fn main() {
    let (pipe_reader, mut pipe_writer) = os_pipe::pipe().unwrap();
    write!(pipe_writer, "write content").unwrap();
    let out = std::process::Command::new("./src/test.py")
        .arg(pipe_reader.into_raw_fd().to_string())
        .output()
        .unwrap();
    println!(
        "STDOUT: {}\nSTDERR: {}",
        String::from_utf8_lossy(&out.stdout),
        String::from_utf8_lossy(&out.stderr)
    );
}

Существует fd, поскольку "STDOUT: fd: 3" get напечатано python. Тем не менее, python ошибки с "OSError: [Errno 9] Bad дескриптор файла"

Что не так с моим кодом?

...