本文簡要介紹rust語言中 std::process::Stdio.piped
的用法。
用法
pub fn piped() -> Stdio
應該安排一個新的管道來連接父進程和子進程。
例子
使用標準輸出:
use std::process::{Command, Stdio};
let output = Command::new("echo")
.arg("Hello, world!")
.stdout(Stdio::piped())
.output()
.expect("Failed to execute command");
assert_eq!(String::from_utf8_lossy(&output.stdout), "Hello, world!\n");
// Nothing echoed to console
使用標準輸入:
use std::io::Write;
use std::process::{Command, Stdio};
let mut child = Command::new("rev")
.stdin(Stdio::piped())
.stdout(Stdio::piped())
.spawn()
.expect("Failed to spawn child process");
let mut stdin = child.stdin.take().expect("Failed to open stdin");
std::thread::spawn(move || {
stdin.write_all("Hello, world!".as_bytes()).expect("Failed to write to stdin");
});
let output = child.wait_with_output().expect("Failed to read stdout");
assert_eq!(String::from_utf8_lossy(&output.stdout), "!dlrow ,olleH");
將超過管道緩衝區的輸入值寫入 stdin 而不同時讀取 stdout 和 stderr 可能會導致死鎖。當運行任何不能保證在寫入超過管道緩衝區的輸出值之前讀取其整個標準輸入的程序時,這是一個問題。管道緩衝區的大小因目標而異。
相關用法
- Rust Stdio.inherit用法及代碼示例
- Rust Stdio.null用法及代碼示例
- Rust Stdin.split用法及代碼示例
- Rust Stdin.read_line用法及代碼示例
- Rust Stdin用法及代碼示例
- Rust StdinLock用法及代碼示例
- Rust Stdin.lock用法及代碼示例
- Rust Stdin.lines用法及代碼示例
- Rust Stdin.into_locked用法及代碼示例
- Rust Stderr.lock用法及代碼示例
- Rust Stdout.lock用法及代碼示例
- Rust Stdout.into_locked用法及代碼示例
- Rust Stderr.into_locked用法及代碼示例
- Rust String.try_reserve用法及代碼示例
- Rust String.insert_str用法及代碼示例
- Rust String.into_raw_parts用法及代碼示例
- Rust String.extend_from_within用法及代碼示例
- Rust String.clear用法及代碼示例
- Rust String.reserve用法及代碼示例
- Rust String.from_utf16_lossy用法及代碼示例
- Rust String.push用法及代碼示例
- Rust StructuralEq用法及代碼示例
- Rust String.as_bytes用法及代碼示例
- Rust String.as_str用法及代碼示例
- Rust String.with_capacity用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 std::process::Stdio.piped。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。