スクリプトを使用して分割画面の出力を保存するには?

スクリプトを使用して分割画面の出力を保存するには?

test.py以下のみを含むPythonスクリプトがありますprint('hi')screena の出力screenが によって保存されるように a で実行したいと思います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 対話型シェルの代わりにコマンドを実行する

答え1

このフラグを使用して自動ファイルを-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

答え2

逆の順序で実行し、次scriptを実行する必要がありますscreen

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

答え3

もう一つの方法は、画面を最初に接続することです。

screen -r <pid or name>

それから:

Ctrl+ AH

ログインが始まりますscreenlog.0

答え4

働くことができる!

screen sh -c './some-script 2>&1 | tee mylog.log'

関連情報