簡體   English   中英

有沒有辦法為正在運行的python程序解緩沖nohup?

[英]Is there a way to unbuffer nohup for a running python program?

我開始在具有以下內容的服務器上運行python程序:

nohup python program.py &

該程序包含一個循環,該循環運行一個函數並每次輸出其輸出:

for i in s:
    print f(i)

我昨天啟動了程序,但我的nohup.out仍然為空。 我搜索了互聯網,似乎python緩沖了輸出。 我不想停止並重新運行程序。 現在有什么方法可以將輸出刷新到nohup.out嗎?

不容易或不可靠。 我可以描述一些可能有用的東西,但是我從未在Python中對其進行過測試,並且有一些假設。

假設Python使用的是libc stdio緩沖區,則可以使用gdb附加到正在運行的Python解釋器,並使用gdb在stdout上調用fflush。

請注意,這可能會使您正在運行的程序崩潰。

首先找到python程序的PID。

其次,使用GDB附加到它: gdb --pid [PID from first step]

第三,在GDB類型中call fflush(stdout)

然后輸入detach然后輸入q以退出GDB。

沒有保證。

您可以使用stdbuf ,無緩沖的STDOUT:

stdbuf -o0 nohup python program.py &

行緩沖STDOUT:

stdbuf -oL nohup python program.py &

或者最好將-u選項與python

nohup python -u program.py &

或在程序中使用sys.stdout.flush(()刷新STDOUT,以使STDOUT無緩沖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM