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

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

我有一个 Python 脚本test.py,仅包含:print('hi')。我想在 a 中运行它screen,以便 a 的输出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 string:如果存在 -c 选项,则从字符串读取命令。如果字符串后面有参数,它们将被分配给位置参数,从 $0 开始。

脚本的手册页:

-c, --command 运行命令而不是交互式 shell

答案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+ A,H

它将开始登录screenlog.0

答案4

可以工作!

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

相关内容