Python 如何从php执行shell命令,而不等待WINDOWS上的输出
我有一个掩码检测python程序。无论何时我们运行它,它都会持续运行并不断检测(无休止的程序)。我制作了一个web门户,用php在一个按钮点击事件上启动这个python程序。现在的问题是,当我用shell_exec()启动这个程序时,它会启动。但是php会等待程序完成。在程序运行之前(从shell_exec()),php只是冻结,甚至不加载任何其他页面 那么,如何从shell_exec()运行cmd命令,而不是等待它完成执行呢 代码Python 如何从php执行shell命令,而不等待WINDOWS上的输出,python,php,stdout,stdin,stderr,Python,Php,Stdout,Stdin,Stderr,我有一个掩码检测python程序。无论何时我们运行它,它都会持续运行并不断检测(无休止的程序)。我制作了一个web门户,用php在一个按钮点击事件上启动这个python程序。现在的问题是,当我用shell_exec()启动这个程序时,它会启动。但是php会等待程序完成。在程序运行之前(从shell_exec()),php只是冻结,甚至不加载任何其他页面 那么,如何从shell_exec()运行cmd命令,而不是等待它完成执行呢 代码 $command = escapeshellcmd("
$command = escapeshellcmd("start cmd /c python mask_detector.py " );
$output = shell_exec($command);
这可以通过多种方式实现,我可以想到的一个相对简单的方法是使用
管道
并持续读取结果。
如果你
例如:
from subprocess import PIPE, run
cmd = [python3, "SCRIPTNAME.py" ...]
result = run(cmd, stdout=PIPE, stderr=PIPE, universal_newlines=True)
现在,您可以根据操作系统和Python版本将标准输出重定向到如图所示的文件(特别是post)
现在,您可以每x秒读取一次此文件(或其副本),并将其发送到PHP。我在本博客上找到了我的问题的简单解决方案 多亏了这个天才 这里给出的解决方案是这个函数
function <span style="color: red;">bgExec</span>($cmd) {
if(substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $cmd, "r"));
}else {
exec($cmd . " > /dev/null &");
}
}
谢谢兄弟的回答。我刚才有一个简单的解决办法。一定要去看看。我已经在这里贴了
pclose(popen("start cmd /c python demo.py", "r"));