在php脚本中,调用函数shell_exec来执行python脚本并将stdout重定向到文件。这是我的一段代码:
shell_exec("pythonScript > progress.txt");
python脚本每隔五秒在stdout写一个新行。一切都很成功,但python脚本的输出只在执行结束时写入文件,而不是每隔五秒。我也试过这段代码:
shell_exec("pythonScript > progress.txt &");
但我有同样的效果。 我该怎么做才能确保stdout在生成时写入文件direttament?
答案 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