php一旦生成就重定向stdout

时间:2012-10-04 10:48:30

标签: php python stdout

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

shell_exec("pythonScript > progress.txt");

python脚本每隔五秒在stdout写一个新行。一切都很成功,但python脚本的输出只在执行结束时写入文件,而不是每隔五秒。我也试过这段代码:

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

但我有同样的效果。 我该怎么做才能确保stdout在生成时写入文件direttament?

2 个答案:

答案 0 :(得分:1)

问题很可能是由于你的python脚本中的缓冲。要在python脚本中关闭stdout缓冲,请

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

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

#!/usr/bin/python

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

#!/usr/bin/python -u

答案 1 :(得分:0)

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

$ 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