如何使用脚本保存分离屏幕的输出?

Fra*_*urt 10 logs gnu-screen

我有一个test.py仅包含以下内容的 Python 脚本:print('hi'). 我想在运行它screen,这样的输出screen被保存script

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

screen -dm bash -c 'python test.py'
Run Code Online (Sandbox Code Playgroud)

但是,我还没有设法找到一种方法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
    
    Run Code Online (Sandbox Code Playgroud)

我使用 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

Ste*_*ris 15

您可以使用该-L标志来创建一个自动screenlog.0文件

例如

$ screen -dm -L sh -c 'echo hello'
$ cat screenlog.0 
hello
Run Code Online (Sandbox Code Playgroud)

如果您有一个长时间运行的屏幕会话未被记录,那么您可以稍后打开记录

例如

$ screen -dm -S test sh -c 'while [ 1 ]; do date; sleep 1; done'
Run Code Online (Sandbox Code Playgroud)

现在我们可以打开日志记录

$ screen -S test -p 0 -X log
Run Code Online (Sandbox Code Playgroud)

允许一些时间过去,因为日志记录是按块写入的,并且...

$ 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
Run Code Online (Sandbox Code Playgroud)

  • 当屏幕已经启动而没有 -L 时,他们是否可以从开始保存输出历史记录? (2认同)

Ste*_*itt 7

你应该反过来做,在script里面跑screen

screen -dm bash -c 'script -c "python test.py" output.txt'
Run Code Online (Sandbox Code Playgroud)