如何通过 PHP 在 windows 中 运行 后台进程?

How to run a background process by PHP in windows?

我尝试 运行 Python 脚本作为后台进程从 PHP 到 Windows 使用 exec() 这样:

<?PHP
    $python    = 'C:\Users\User\anaconda3\python.exe';
    $py_script = 'C:\wamp\www\lab\ex\simple_test.py';
    $py_stdout    = '> temp\'.session_id()."_std.txt";
    $py_stderror  = '2> temp\'.session_id()."_stde.txt";

    exec("$py_bg $python $py_script $py_stdout $py_stderror &");

脚本调用并正常运行,但PHP仍在等待脚本。 我删除了结尾 & 因为我发现它只适用于 Linux 并且在搜索其他问答后找到这个 sulotion:

    exec("start /B $py_bg $python $py_script $py_stdout $py_stderror");

但结果相同。我该如何解决这个问题?

===更新:

我用错了start /B ,我把代码改成这样:

<?PHP
    $python    = 'C:\Users\User\anaconda3\python.exe';
    $py_script = 'C:\wamp\www\lab\ex\simple_test.py';
    $py_stdout    = '> temp\'.session_id()."_std.txt";
    $py_stderror  = '2> temp\'.session_id()."_stde.txt";
    $py_cmd = "$python $py_script $py_arg_1 $py_std $py_stde";

    pclose(popen("start /B ". $py_cmd, "a"));

但现在 PHP 中出现 popen() 的警告:

Warning: popen(start /B ...,a): No error in C:\wamp\www\lab\start.php on line 50

另一个 pclose():

Warning: pclose() expects parameter 1 to be resource, bool given in ...

我检查了 PHP: popen - Manual 并发现 a 不是有效模式,但我在附近的几个答案中看到了这一点!

但是:

The mode. Either 'r' for reading, or 'w' for writing.

通过将模式更改为 r,脚本在后台正确调用和 运行,PHP 或 Py 上没有错误或警告。

<?PHP
    $python    = 'C:\Users\User\anaconda3\python.exe';
    $py_script = 'C:\wamp\www\lab\ex\simple_test.py';
    $py_stdout    = '> temp\'.session_id()."_std.txt";
    $py_stderror  = '2> temp\'.session_id()."_stde.txt";
    $py_cmd = "$python $py_script $py_arg_1 $py_std $py_stde";

    pclose(popen("start /B ". $py_cmd, "r"));