execute_async

Function execute_async 

Source
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