blz*_*blz 2 windows command-prompt rust
我想从 Rust 程序运行此命令:
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "https://stackoverflow.com/"
Run Code Online (Sandbox Code Playgroud)
在cmd中,这是有效的。
cmd /C ""C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "https://stackoverflow.com/""
Run Code Online (Sandbox Code Playgroud)
在 C# 中,这是可行的。
var comm = @"""""C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"" ""https://stackoverflow.com/""""";
System.Diagnostics.Process.Start("cmd", "/C " + comm);
Run Code Online (Sandbox Code Playgroud)
在 Rust 中,这是行不通的。
let comm = r#"""C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "https://stackoverflow.com/"""#;
let output = Command::new("cmd")
.args(&["/C", comm])
.output()
.expect("failed to execute process");
Run Code Online (Sandbox Code Playgroud)
我收到以下错误。
var comm = @"""""C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"" ""https://stackoverflow.com/""""";
System.Diagnostics.Process.Start("cmd", "/C " + comm);
Run Code Online (Sandbox Code Playgroud)
但是,它comm在时有效echo hello。
我尝试了另外两种方法:
这
let comm = r#"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe https://stackoverflow.com/"#;
Run Code Online (Sandbox Code Playgroud)
是
let comm = r#"""C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "https://stackoverflow.com/"""#;
let output = Command::new("cmd")
.args(&["/C", comm])
.output()
.expect("failed to execute process");
Run Code Online (Sandbox Code Playgroud)这
let comm = r#""C:\Program Files (x86)\Google\Chrome\Application\chrome.exe https://stackoverflow.com/""#;
Run Code Online (Sandbox Code Playgroud)
是
'\"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe\"' is not recognized as an internal or external command,
operable program or batch file.
Run Code Online (Sandbox Code Playgroud)这是一个已知的问题。不幸的是,Windows 的转义参数规则并不简单,而且很难正确执行。
这段代码:
let comm = r#""C:\Program Files\Google\Chrome\Application\chrome.exe" https://stackoverflow.com/"#;
let mut cmd = Command::new("cmd");
cmd.arg("/c");
cmd.arg(comm);
Run Code Online (Sandbox Code Playgroud)
执行这个:
let comm = r#""C:\Program Files\Google\Chrome\Application\chrome.exe" https://stackoverflow.com/"#;
let mut cmd = Command::new("cmd");
cmd.arg("/c");
cmd.arg(comm);
Run Code Online (Sandbox Code Playgroud)
不幸的是,内部引号已被转义,尽管在本例中它们不应该被转义。
作为一种解决方法,在许多情况下,您实际上并不需要使用cmd. 在这些情况下,直接执行该过程更为明智:
let output = Command::new(r#"C:\Program Files\Google\Chrome\Application\chrome.exe"#)
.args(&["https://stackoverflow.com/"])
.output()
.expect("failed to execute process");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2275 次 |
| 最近记录: |