当我尝试从Rust程序调用{{1}}命令时,我收到find
或FIND: Invalid switch
错误。
FIND: Parameter format incorrect
在命令行中运行良好。
find
我正在搜索的文件(echo $PATH
/usr/local/bin:/usr/bin:/cygdrive/c/Windows/system32:/cygdrive/c/Windows:.....
)存在。
main.rs
./ find_cmdd.exe
use std::process::{Stdio,Command}; use std::io::{Write}; fn main() { let mut cmd_find = Command::new("/cygdrive/c/cygwin64/bin/find.exe") .arg("/cygdrive/c/cygwin64/home/*") .stdin(Stdio::piped()) .spawn() .unwrap_or_else(|e| { panic!("failed to execute process: {}", e)}); if let Some(ref mut stdin) = cmd_find.stdin { stdin.write_all(b"main.rs").unwrap(); } let res = cmd_find.wait_with_output().unwrap().stdout; println!("{}",String::from_utf8_lossy(&res)); }
我也尝试了以下选项,
thread '<main>' panicked at 'failed to execute process: The system cannot find the file specified. (os error 2)', find_cmdd.rs:12
我得到let mut cmd_find = Command::new("find").....
错误。
我无法将FIND:Invalid switch
重命名/复制到其他位置。
答案 0 :(得分:2)
&#34;发现:无效的开关错误&#34;表示这不是cygwin find
,但是你正在调用Windows。要仔细检查:
$ find -k
find: unknown predicate `-k'
$ /cygdrive/c/windows/system32/find -k
FIND: Parameter format not correct
答案 1 :(得分:1)
当您通过Command
运行程序时,Cygwin基本上不存在。执行进程使用操作系统的本机功能;在Windows that's CreateProcessW
的情况下。
这意味着:
PATH
变量在启动流程时可能有意义,也可能没有任何意义。/cygdrive/...
的目录结构;那是一件神器。所有这一切,你必须使用Windows原生路径:
use std::process::{Stdio, Command};
use std::io::Write;
fn main() {
let mut cmd_find = Command::new(r#"\msys32\usr\bin\find.exe"#)
.args(&[r#"\msys32\home"#])
.stdin(Stdio::piped())
.spawn()
.unwrap_or_else(|e| panic!("failed to execute process: {}", e));
if let Some(ref mut stdin) = cmd_find.stdin {
stdin.write_all(b"main.rs").unwrap();
}
let res = cmd_find.wait_with_output().unwrap().stdout;
println!("{}", String::from_utf8_lossy(&res));
}
作为旁注,我不知道find
的管道标准输入是做什么的;它对Msys2或OS X似乎没有任何影响......