我有一個命名管道'timer_fifo',python腳本的標準輸出重定向到timer_fifo,同時另一個shell腳本進程從中讀取,處理它然後將其重定向到另一個名爲'activity_file' 。將stdout重定向到文件顯示錯誤的內容
的Python腳本:
import time
while True:
print(time.strftime('%Y_%m_%d', time.gmtime()))
time.sleep(1)
執行上面的Python腳本:
python above_file_name > timer_fifo
shell腳本:
while true
do
read action <timer_fifo;
echo $action | stdbuf -o0 -e0 -i0 sed -n "s/^\([^[:space:]].*\)/\1 Cinnamon/p" >> activity_file
done
注:以上sed的命令追加 '肉桂' 和重定向到活動文件,所以如果輸入是'2017_02_01',那麼它變成'2017_02_01肉桂',它也忽略輸入s如果它是以空間開始的話。
執行上面的shell腳本:
./file_name
了一段時間的文件的尾部:
2017_02_01 Cinnamon
2017_02_01 Cinnamon
2017_02_01 Cinnamon
2017_02_01 Cinnamon
2017_02_01 Cinnamon
2017_02_01 Cinnamon
2017_02_01 Cinnamon
但經過一段時間的文件的尾部:
2017_02_01 Cinnamon
2017_02_01 Cinnamon
2017_02_01 Cinnamon
2017_02_01 Cinnamon
017_02_01 Cinnamon
207_20 Cinnamon
270_1 Cinnamon
210_101_2001_20 Cinnamon
2017_02_0 Cinnamon
270_11207_02_01 Cinnamon
107_20 Cinnamon
0020 Cinnamon
正如你看到的,爲什麼輸出會搞砸? 另外我可能不止一次地執行了上面的腳本,所以多個進程同時寫入同一個文件會導致排序輸出?如果有,請解釋原因?
Google上有很多東西,試試吧。 – Marichyasana
這就是我在來這裏之前所做的。 – druuu