pub async fn execute_async(
command: &str,
folder: Option<&str>,
stdout_fn: impl Fn(String) + Send + Sync + 'static,
stderr_fn: impl Fn(String) + Send + Sync + 'static,
complete_fn: impl Fn() + Send + Sync + 'static,
) -> Result<bool>Expand description
执行命令,同步得到结果,异步输出
§示例:
use wang_utils_command::execute_async;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// 执行命令
let result = execute_async(
"pwd && sleep 5 && pwd", // 完整命令
None, // 指定调用命令的目录,None为当前目录
|line| {
// 这一行会实时执行,不用等到命令执行结束
println!("stdout:{line}");
},
|line| {
// 这一行会实时执行,不用等到命令执行结束
println!("stderr:{line}");
},
|| {
// 这一行会在命令执行结束后回调
println!("complete");
},
)
.await?;
// 会在命令执行完毕才能到这一行
println!("result:{result:?}");
Ok(())
}输出结果:
stdout:/Users/wangbin/src/rust/wang-utils/examples
>> 中间会间隔5秒
stdout:/Users/wangbin/src/rust/wang-utils/examples
complete
result:true