Logs

如何使用腳本保存分離螢幕的輸出?

  • February 12, 2020

我有一個 Python 腳本test.py,它只包含:print('hi'). 我想在 a 中執行它,screen以便將輸出screen保存為script.

我使用以下命令test.py在 a中執行screen,它工作正常:

screen -dm bash -c 'python test.py'

但是,我還沒有找到一種方法script來保存screen. 我該怎麼做?


我嘗試失敗:

  • script -c "screen -dm bash -c 'python test.py'" output.txt:輸出文件 output.txt 不包含hi,而僅包含:
Script started on Fri 26 Aug 2016 01:04:59 PM EDT

Script done on Fri 26 Aug 2016 01:04:59 PM EDT

我使用 Ubuntu 14.04.4 LTS x64。


文件:

https://www.gnu.org/software/screen/manual/screen.html:

-d -m:以分離模式啟動螢幕。這會創建一個新會話,但不會附加到它。這對於系統啟動腳本很有用。

http://linux.about.com/library/cmd/blcmdl1_sh.htm :

-c 字元串:如果存在 -c 選項,則從字元串中讀取命令。如果字元串後面有參數,則將它們分配給位置參數,從 $0 開始。

腳本的手冊頁:

-c, –command 執行命令而不是互動式shell

你應該反過來做,在script裡面跑screen

screen -dm bash -c 'script -c "python test.py" output.txt'

您可以使用該-L標誌創建一個自動screenlog.0文件

例如

$ screen -dm -L sh -c 'echo hello'
$ cat screenlog.0 
hello

如果您有一個長時間執行的螢幕會話沒有被記錄,那麼您可以稍後打開記錄

例如

$ screen -dm -S test sh -c 'while [ 1 ]; do date; sleep 1; done'

現在我們可以打開日誌了

$ screen -S test -p 0 -X log

允許一些時間過去,因為日誌記錄是以塊的形式寫入的,並且…

$ cat screenlog.0
Fri Aug 26 13:25:49 EDT 2016
Fri Aug 26 13:25:50 EDT 2016
Fri Aug 26 13:25:51 EDT 2016
Fri Aug 26 13:25:52 EDT 2016
Fri Aug 26 13:25:53 EDT 2016
Fri Aug 26 13:25:54 EDT 2016
Fri Aug 26 13:25:55 EDT 2016
Fri Aug 26 13:25:56 EDT 2016
Fri Aug 26 13:25:57 EDT 2016
Fri Aug 26 13:25:58 EDT 2016

引用自:https://unix.stackexchange.com/questions/305950