diff --git a/src/benchmark/executor.rs b/src/benchmark/executor.rs index 096c622..64d621d 100644 --- a/src/benchmark/executor.rs +++ b/src/benchmark/executor.rs @@ -1,7 +1,7 @@ use std::process::{ExitStatus, Stdio}; use crate::command::Command; -use crate::options::{CmdFailureAction, CommandOutputPolicy, Options, OutputStyleOption, Shell}; +use crate::options::{CmdFailureAction, CommandInputPolicy, CommandOutputPolicy, Options, OutputStyleOption, Shell}; use crate::output::progress_bar::get_progress_bar; use crate::timer::{execute_and_measure, TimerResult}; use crate::util::randomized_environment_offset; @@ -36,11 +36,13 @@ pub trait Executor { fn run_command_and_measure_common( mut command: std::process::Command, command_failure_action: CmdFailureAction, + command_input_policy: &CommandInputPolicy, command_output_policy: &CommandOutputPolicy, command_name: &str, ) -> Result { let (stdout, stderr) = command_output_policy.get_stdout_stderr()?; - command.stdin(Stdio::null()).stdout(stdout).stderr(stderr); + let stdin = command_input_policy.get_stdin()?; + command.stdin(stdin).stdout(stdout).stderr(stderr); command.env( "HYPERFINE_RANDOMIZED_ENVIRONMENT_OFFSET", @@ -83,6 +85,7 @@ impl<'a> Executor for RawExecutor<'a> { let result = run_command_and_measure_common( command.get_command()?, command_failure_action.unwrap_or(self.options.command_failure_action), + &self.options.command_input_policy, &self.options.command_output_policy, &command.get_command_line(), )?; @@ -142,6 +145,7 @@ impl<'a> Executor for ShellExecutor<'a> { let mut result = run_command_and_measure_common( command_builder, command_failure_action.unwrap_or(self.options.command_failure_action), + &self.options.command_input_policy, &self.options.command_output_policy, &command.get_command_line(), )?; diff --git a/src/cli.rs b/src/cli.rs index d05455d..9abfc19 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -312,6 +312,14 @@ fn build_command() -> Command { .hide(true) .help("Enable debug mode which does not actually run commands, but returns fake times when the command is 'sleep