通过PHP运行python脚本,并将stdout、stderr重定向到文件


Running a python script through PHP and redirecting stdout, stderr to file

我有一个PHP页面,我希望它触发一个python脚本在后台运行,并将其stdout和stderr重定向到稍后读取的文件。

我尝试了以下方法:

system('python -u /home/omar/workspace/test/test2.py > /home/omar/workspace/test/testfile &');

这很好,因为PHP不会阻塞,并且输出正确地写入到文件中。

但由于这只是标准输出,我尝试将&>而不是>:

system('python -u /home/omar/workspace/test/test2.py &> /home/omar/workspace/test/testfile &');

出于某种原因,这会导致页面被阻塞,python脚本的输出显示在PHP页面本身中,并且不会向文件中写入任何内容!

这种亵渎有什么原因吗?

我是这样解决的:

system('python -u test2.py > testfile 2>&1 & echo $!');

最后一点是获取python实例的pid。

我认为您需要使用>&而不是&>

详见

">"重定向标准输出

">&"重定向标准输出和标准错误

"<"重定向标准输入

">!"重定向标准输出;覆盖文件(如果存在)

">&!"重定向标准输出和标准错误;覆盖文件(如果存在)

"|"将标准输出重定向到另一个命令(管道)

">>"附加标准输出

">>&"附加标准输出和标准错误