반응형
Rust에서 시스템 명령을 호출하고 출력을 캡처하려면 어떻게해야합니까?
같은 시스템 명령을 호출 할 수있는 방법이 있나요 ls
또는 fuser
녹는? 출력을 캡처하는 것은 어떻습니까?
std::process::Command
허용합니다.
자식 프로세스를 생성하고 컴퓨터에서 임의의 명령을 실행하는 방법에는 여러 가지가 있습니다.
spawn
— 프로그램을 실행하고 세부 정보가있는 값을 반환합니다.output
— 프로그램을 실행하고 출력을 반환합니다.status
— 프로그램을 실행하고 종료 코드를 반환합니다.
문서의 간단한 예 :
use std::process::Command;
Command::new("ls")
.arg("-l")
.arg("-a")
.spawn()
.expect("ls command failed to start");
문서 의 매우 명확한 예 :
use std::process::Command;
let output = Command::new("/bin/cat")
.arg("file.txt")
.output()
.expect("failed to execute process");
println!("status: {}", output.status);
println!("stdout: {}", String::from_utf8_lossy(&output.stdout));
println!("stderr: {}", String::from_utf8_lossy(&output.stderr));
assert!(output.status.success());
정말 가능합니다! 관련 모듈은 std::run
입니다.
let mut options = std::run::ProcessOptions::new();
let process = std::run::Process::new("ls", &[your, arguments], options);
ProcessOptions
'표준 파일 설명자는 기본적으로None
(새 파이프 만들기)이므로 process.output()
(예를 들어) 출력에서 읽을 수 있습니다.
당신이 명령을 실행하고 당신이 일을 끝낼 후 모든 출력을 얻고 싶은 경우에, 거기에 wait_with_output
그것을 위해 .
Process::new
어제부터는 Option<Process>
대신 a를 반환합니다 Process
.
또는이 crate cmd_lib를 사용해 볼 수 있습니다. std :: process를 둘러싼 래퍼로, 깨끗하고 자연스럽고 녹슨 방식으로 작업과 같은 쉘 스크립트를 작성합니다.
let all_files = run_fun!("ls -a .")?;
// pipe commands are also supported
run_cmd!("du -ah . | sort -hr | head -n 10");
반응형
'Programing' 카테고리의 다른 글
PHP의 트레이 트 내에서 클래스 생성자를 오버로드하는 방법> = 5.4 (0) | 2020.12.30 |
---|---|
안드로이드의 이해 (0) | 2020.12.30 |
SQL 함수에서 단일 값을 가져올 때 어떻게 NULL을 0으로 변경할 수 있습니까? (0) | 2020.12.29 |
자바 스크립트지도에 동적으로 데이터 추가 (0) | 2020.12.29 |
: after and : before css pseudo elements hack for IE 7 (0) | 2020.12.29 |