代码之家  ›  专栏  ›  技术社区  ›  noio

如何在脚本仍在运行时使shell输出重定向(>)写入?

  •  10
  • noio  · 技术社区  · 14 年前

    我写了一个永不终止的短篇剧本。这个脚本不断地生成我必须时不时检查的输出。我通过SSH在实验室计算机上运行它,并将输出重定向到该计算机上我的公共\uhtml文件夹中的一个文件。

    python script.py > ~/public_html/results.txt
    

    但是,当我刷新地址时,结果不会立即显示。当我终止程序时,结果会显示出来,但正如我所说,它不会自行停止。那是重定向吗( > )懒得写作?有没有办法连续(或间隔)更新文件中的结果?

    或者是Web服务器在文件仍在编写时不更新文件?

    3 回复  |  直到 14 年前
        1
  •  15
  •   Community Egal    7 年前

    sys.stdout.flush() (或smth)如果您想立即看到它。看到了吗 this

        2
  •  7
  •   Jürgen Hötzel    14 年前

    标准 是缓冲的,如果没有连接到终端。

    您可以通过将此策略更改为行缓冲

    stdbuf -oL python script.py > ~/public_html/results.txt
    

    因此,如果不需要行缓冲,就不必刷新Python脚本并保持其IO效率。

        3
  •  1
  •   Jason R. Coombs    14 年前

    我怀疑文件正在被连续写入,但是web服务器报告文件的修改日期是文件打开时的日期,因此报告文件没有发生更改,结果正在缓存(在web服务器或客户端)。

    我会首先尝试强制重新加载(Ctrl+F5或Ctrl+Shift+R或Shift+<重新加载按钮(>)看看能不能帮上忙。如果不行,那你可以试试别的。

    在服务器上的单独shell中,执行以下操作

    tail -f ~/public_html/results.txt
    

    Tail打印出文件的最后n行(其中n默认为10),但是-f参数监视文件并随着文件的增长继续报告输出。这至少会让您确信文件正在以增量方式写入。

    我希望这有帮助。