繁体   English   中英

php在生成标准输出后立即对其进行重定向

[英]php redirect the stdout as soon as it is generated

在php脚本内,调用函数shell_exec执行python脚本并将stdout重定向到文件。 这是我的一段代码:

shell_exec("pythonScript > progress.txt");

python脚本每五秒钟在stdout上写一个新行。 一切都成功,但是python脚本的输出仅在执行结束时写入文件,而不是每五秒钟写入一次。 我也尝试使用此代码:

shell_exec("pythonScript > progress.txt &");

但我有同样的效果。 生成标准输出时,应如何确保将其写入文件删除?

该问题最有可能是由于您的python脚本中存在缓冲。 要在python脚本中关闭stdout缓冲,请执行以下任一操作:

  • 每次要确保将到目前为止的输出发送到文件时,请使用sys.stdout.flush()

  • 使用选项-u启动python,该选项将禁用stdout缓冲。 在您的情况下,可能应该在脚本内部完成,替换第一行;

#!/usr/bin/python

(或类似,取决于路径)与

#!/usr/bin/python -u

问题是您正在使用重定向运算符> ,该运算符每次运行时都会覆盖输出文件,这就是为什么您只看到一行(命令输出的最后一行)的原因。 您需要使用>>附加到文件:

$ echo 'foo' > out.txt
$ echo 'bar' > out.txt
$ cat out.txt
bar
$ echo 'foo' >> out.txt
$ echo 'bar' >> out.txt
$ cat out.txt
bar
foo
bar

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM