如何通过 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"));
我尝试 运行 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"));