php异步处理shell,php异步执行shell脚本

docker.php

/**

* 跨平台执行脚本

*

* @return array

* array['output'] 执行后的输出结果

* array['status'] 执行状态 0为正常 127 找不到脚本 126没有执行该shell脚本权限

*/

function terminal($command) {

// system

if (function_exists ( 'system' )) {

ob_start ();

system ( $command, $return_var );

$output = ob_get_contents ();

ob_end_clean ();

}

// passthru

else if (function_exists ( 'passthru' )) {

ob_start ();

passthru ( $command, $return_var );

$output = ob_get_contents ();

ob_end_clean ();

}

// exec

else if (function_exists ( 'exec' )) {

exec ( $command, $output, $return_var );

$output = implode ( "\n", $output );

}

// shell_exec

else if (function_exists ( 'shell_exec' )) {

$output = shell_exec ( $command );

$return_var = '';

}

else {

$output = 'Command execution not possible on this system';

$return_var = 1;

}

return array (

'output' => $output,

'status' => $return_var

);

}

terminal('./shell/start.sh developer-hub-com-docker-test developer-hub-test:v1 8088 > /dev/null 2>&1 &');

start.sh

#!/bin/sh

/usr/bin/docker stop $1

/usr/bin/docker rm $1

/usr/bin/docker run --name $1 -p $3:80 $2 /bin/bash -c 'php-fpm && sed -i -e "s/\$port/80/g" /etc/nginx/conf.d/developer_hub_com.conf && nginx'

在QT中,您可以使用QProcess类来异步调用shell脚本。下面是一个示例代码: ```cpp #include <QCoreApplication> #include <QProcess> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QProcess process; process.start("sh", QStringList() << "/path/to/your/script.sh"); // 替换为您的脚本路径 // 连接readyReadStandardOutput信号,当有输出可读取时进行处理 QObject::connect(&process, &QProcess::readyReadStandardOutput, [&process]() { QByteArray output = process.readAllStandardOutput(); qDebug() << "输出:" << output; }); // 连接finished信号,当进程执行完毕时进行处理 QObject::connect(&process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), [&](int exitCode, QProcess::ExitStatus exitStatus) { qDebug() << "进程执行完毕,退出码:" << exitCode; qDebug() << "退出状态:" << exitStatus; }); return a.exec(); } ``` 在这个示例中,我们创建了一个QProcess对象,并使用`start()`方法启动一个shell脚本。您需要将`/path/to/your/script.sh`替换为您实际的脚本路径。 然后,我们使用`QObject::connect()`函数连接了`readyReadStandardOutput`信号和`finished`信号。当shell脚本有输出可读取时,将会触发`readyReadStandardOutput`信号,我们在Lambda表达式中读取输出并进行处理。当进程执行完毕时,将会触发`finished`信号,我们也在Lambda表达式中进行处理。 运行这段代码时,您将会异步调用指定的shell脚本,并在输出和完成时进行相应的处理。请确保脚本的可执行权限以及路径的正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值