我有一个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。
我认为您需要使用>&而不是&>
详见
">"重定向标准输出
">&"重定向标准输出和标准错误
"<"重定向标准输入
">!"重定向标准输出;覆盖文件(如果存在)
">&!"重定向标准输出和标准错误;覆盖文件(如果存在)
"|"将标准输出重定向到另一个命令(管道)
">>"附加标准输出
">>&"附加标准输出和标准错误