擅长:python、mysql、java
<p>选项1和2都可以,但是哦,天哪,为了一切都好,避免为此使用线程!你最终会得到两个世界中最糟糕的结果:锁定问题,<em>和</em>绘图线程中的异常无论如何都会杀死整个程序(包括日志线程)。正如其他人所提到的,使用两个单独的过程是可以的。<code>screen</code>是一种奇怪的工具选择,就像用python手工编写代码一样。我只是将talk2controller脚本重写为这个简单的脚本:</p>
<pre><code>stty -F /dev/tty.KeySerial1 19200 raw
cat </dev/tty.KeySerial1 >logfile
</code></pre>
<p>(如果希望脚本的每次运行都附加到文件中,而不是从头重写,也可以使用<code>>>logfile</code>。)</p>
<p>另一个问题是,只要有人在写,程序是否可以从文件中读取。这个问题的一个更具体的版本是:如果一行日志在您试图阅读时被写了一半呢?在</p>
<p>答案是:你可以这样做,但你是对的,你不能保证一行字在你读的时候不会写一半。(如果您为<code>cat</code>或<code>screen</code>编写自己的替代品,您实际上可以通过始终使用<code>os.read()</code>而不是<code>sys.stdout.write()</code>或<code>print</code>写入文件来实现这一保证。)</p>
<p>然而,无论如何也不需要这种保证。你只需要在阅读文件时小心,你永远不会有问题。本质上,不完整的行就是不以<code>\n</code>换行符结尾的行。因此:</p>
^{pr2}$
<p>由于<code>\n</code>字符是日志中每一行写入的最后一个字符,因此您肯定知道,如果您读取<code>\n</code>字符,那么在它正确写入之前的所有内容都是正确的。在</p>