Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从php执行shell命令,而不等待WINDOWS上的输出_Python_Php_Stdout_Stdin_Stderr - Fatal编程技术网

Python 如何从php执行shell命令,而不等待WINDOWS上的输出

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("

我有一个掩码检测python程序。无论何时我们运行它,它都会持续运行并不断检测(无休止的程序)。我制作了一个web门户,用php在一个按钮点击事件上启动这个python程序。现在的问题是,当我用shell_exec()启动这个程序时,它会启动。但是php会等待程序完成。在程序运行之前(从shell_exec()),php只是冻结,甚至不加载任何其他页面

那么,如何从shell_exec()运行cmd命令,而不是等待它完成执行呢

代码

$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"));