diff --git a/crates/erg_common/python_util.rs b/crates/erg_common/python_util.rs index 8917c5357..6246545d5 100644 --- a/crates/erg_common/python_util.rs +++ b/crates/erg_common/python_util.rs @@ -853,7 +853,7 @@ pub fn spawn_py(py_command: Option<&str>, code: &str) { } } -pub fn exec_py_code(code: &str, output: Output) -> std::io::Result { +pub fn exec_py_code(code: &str, args: &[&str], output: Output) -> std::io::Result { let mut out = if cfg!(windows) { let fallback = |err: std::io::Error| { // if the filename or extension is too long @@ -867,6 +867,7 @@ pub fn exec_py_code(code: &str, output: Output) -> std::io::Result { .unwrap(); Command::new(which_python()) .arg(tmp_file) + .args(args) .stdout(output.clone()) .spawn() } else { @@ -876,12 +877,13 @@ pub fn exec_py_code(code: &str, output: Output) -> std::io::Result { Command::new(which_python()) .arg("-c") .arg(code) + .args(args) .stdout(output.clone()) .spawn() .or_else(fallback) .expect("cannot execute python") } else { - let exec_command = format!("{} -c \"{code}\"", which_python()); + let exec_command = format!("{} -c \"{code}\" {}", which_python(), args.join(" ")); Command::new("sh") .arg("-c") .arg(exec_command) diff --git a/crates/erg_compiler/ty/codeobj.rs b/crates/erg_compiler/ty/codeobj.rs index ef5fc9792..156bae77f 100644 --- a/crates/erg_compiler/ty/codeobj.rs +++ b/crates/erg_compiler/ty/codeobj.rs @@ -5,8 +5,8 @@ use std::io::{BufReader, Read, Write as _}; use std::path::Path; use std::process::ExitStatus; +use erg_common::config::ErgConfig; use erg_common::impl_display_from_debug; -use erg_common::io::Output; #[allow(unused_imports)] use erg_common::log; use erg_common::opcode::CommonOpcode; @@ -453,8 +453,12 @@ impl CodeObj { format!("import marshal; exec(marshal.loads(b'{bytecode}'))") } - pub fn exec(self, py_magic_num: Option, output: Output) -> std::io::Result { - exec_py_code(&self.executable_code(py_magic_num), output) + pub fn exec(self, cfg: &ErgConfig) -> std::io::Result { + exec_py_code( + &self.executable_code(cfg.py_magic_num), + &cfg.runtime_args, + cfg.output.clone(), + ) } fn tables_info(&self) -> String { diff --git a/src/dummy.rs b/src/dummy.rs index d365e672f..badff97d0 100644 --- a/src/dummy.rs +++ b/src/dummy.rs @@ -289,10 +289,7 @@ impl Runnable for DummyVM { eart.errors })?; art.warns.write_all_to(&mut self.cfg_mut().output); - let stat = art - .object - .exec(self.cfg().py_magic_num, self.cfg().output.clone()) - .expect("failed to execute"); + let stat = art.object.exec(self.cfg()).expect("failed to execute"); let stat = ExitStatus::new(stat.code().unwrap_or(0), art.warns.len(), 0); Ok(stat) }