後台執行python程式 遇到緩衝區問題

2021-08-25 15:29:09 字數 1188 閱讀 1165

環境:linux

一段執行時間很長的程式(用python做hive客戶端執行mapreduce) 在linux後台執行,把結果輸出到某檔案:

python ***.py > log.log&
遇到的問題,程式沒報錯,檔案裡卻什麼都沒有,沒有輸入進去。為什麼呢?

於是我首先嘗試用:

nohup python ***.py > log.log &
預料之中 還是不行。

於是我做實驗:

寫了個test.py:

import sys,time

from threading import thread

class worker(thread):

def run(self):

for x in xrange(0,111):

print x

time.sleep(1)

def run():

worker().start()

if __name__ == '__main__':

run()

每秒列印一次

我直接用python text.py 執行  沒問題  每秒輸出乙個數

但我在後台執行:

python test.py > log.log&
還是不行。開始不輸出  直到程式執行完,一次性的寫到log.log檔案了。

為什麼呢? 

原因可能是python 的print 先寫到緩衝區了,還沒flush到檔案。

於是加了一行「sys.stdout.flush() 」 --在每次print後都flush一次。:

import sys,time

from threading import thread

class worker(thread):

def run(self):

for x in xrange(0,111):

print x

sys.stdout.flush()

time.sleep(1)

def run():

worker().start()

if __name__ == '__main__':

run()

問題解決。

Windows後台執行python程式

import win32serviceutil import win32service import win32event import time class smallestpythonservice win32serviceutil.serviceframework svc name small...

程式後台執行

常用的2種方法 1.screen 1 建立 screen,screen r 2 在 screen 內部執行程式,execute 3 ctrl a d 退出 screen 4 需要再次檢視程式執行狀態時候,screen r 2.nohup 範例 nohup execuname param 3 1 no...

python 後台執行

該方法時使用pm2程序管理器來執行python程式的,因為pm2管理器是基於node.js的,所以要先安裝node.js 安裝node 然後安裝pm2 最後使用pm2命令執行python程式就行了 如果想開機自啟動程式 linux系統使用上面的命令就行了 windows下使用批處理命令執行程式,然後...