我尝试在Windows上从Rust中运行kotlinc
。下面是我的代码的一小段:
let mut script_number: u32 = 0;
let script_path: String = format!("run/script-{script_number}.kts");
println!("Running Script: {script_number}");
let mut file = OpenOptions::new()
.read(true)
.write(true)
.create(true)
.open(script_path.clone())
.expect("Could not create file");
file.write_all(
self.editor
.buffer()
.expect("Couldn't read buffer.")
.text()
.as_bytes(),
)
.expect("Could not write to file");
let mut child = Command::new("./kotlinc")
.arg("-script")
.arg(script_path.clone())
.stdout(Stdio::piped())
.spawn()
.expect("Could not execute script");
let stdout = child.stdout.take().expect("Could not read output");
let lines = BufReader::new(stdout).lines();
for line in lines {
println!("{}", line.unwrap());
}
script_number += 1;
我得到以下输出和错误:
Running Script: 0
thread 'main' panicked at 'Could not execute script: Os { code: 5, kind: PermissionDenied, message: "Access is denied." }', src\main.rs:265:30
stack backtrace:
0: std::panicking::begin_panic_handler
at /rustc/69f9c33d71c871fc16ac445211281c6e7a340943/library\std\src\panicking.rs:575
1: core::panicking::panic_fmt
at /rustc/69f9c33d71c871fc16ac445211281c6e7a340943/library\core\src\panicking.rs:65
2: core::result::unwrap_failed
at /rustc/69f9c33d71c871fc16ac445211281c6e7a340943/library\core\src\result.rs:1791
3: enum2$<core::result::Result<std::process::Child,std::io::error::Error> >::expect<std::process::Child,std::io::error::Error>
at /rustc/69f9c33d71c871fc16ac445211281c6e7a340943\library\core\src\result.rs:1070
4: gui_editor::App::launch
at .\src\main.rs:260
5: gui_editor::main
at .\src\main.rs:291
6: core::ops::function::FnOnce::call_once<void (*)(),tuple$<> >
at /rustc/69f9c33d71c871fc16ac445211281c6e7a340943\library\core\src\ops\function.rs:251
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
我怀疑这是创建的文件没有执行权限,然而,在网上搜索后,我似乎无法找到一种方法,使文件执行权限。一些答案在线引用mode
函数,但该函数似乎不存在,当我试图运行它。
只是为了上下文,run
目录存储了计划由程序运行的脚本,它和kotlinc
(Kotlin编译器的副本)目录都是Rust src
目录的兄弟目录。
1条答案
按热度按时间aor9mmx11#
我在kotlinc文件中找到了答案。需要运行的文件是
./kotlinc/bin/kotlinc.bat
,即: