【问题标题】:How to execute shell commands from php and do not wait for output on WINDOWS如何从php执行shell命令并且不等待WINDOWS上的输出
【发布时间】:2021-07-05 00:37:22
【问题描述】:

我有一个面具检测 python 程序。每当我们运行它时,它都会持续运行并不断检测(无休止的程序)。我已经制作了一个门户网站,以使用 php 在按钮单击事件上启动这个 python 程序。现在的问题是,当我通过 shell_exec() 启动这个程序时,它就会启动。但是 php 等待程序完成。直到程序运行时(从 shell_exec() ),php 只是冻结,甚至不加载任何其他页面。

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

代码

$command = escapeshellcmd("start cmd /c python mask_detector.py " );
$output = shell_exec($command);

【问题讨论】:

    标签: python php stdout stdin stderr


    【解决方案1】:

    这可以通过多种方式实现,我能想到的一种相对简单的方法是使用PIPE 并不断读取结果。 如果你

    例如:

    from subprocess import PIPE, run
    
    cmd = [python3, "SCRIPTNAME.py" ...]
    result = run(cmd, stdout=PIPE, stderr=PIPE, universal_newlines=True)
    

    现在您可以根据操作系统和 Python 版本将标准输出重定向到文件,如 here(特别是 this 帖子)所示。

    现在,您可以每 x 秒读取一次该文件(或它的副本)并将其发送到 PHP。

    【讨论】:

    • 感谢兄弟的回答。我刚刚得到了一个简单的解决方案。一定要检查一下。已在此处发布
    【解决方案2】:

    我在此博客 https://subinsb.com/how-to-execute-command-without-waiting-for-it-to-finish-in-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 &"); 
     }
    }
    

    我尝试将我的标准输出重定向到 null,但它在 Windows 平台上对我不起作用。上面的函数使用 popen() 和 pclose() 函数。这样我的工作就完成了。

    pclose(popen("start cmd /c python demo.py", "r")); 
    

    【讨论】:

      猜你喜欢
      • 2012-02-13
      • 2015-02-27
      • 2012-08-13
      • 2015-01-27
      • 2021-04-21
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多