我有一个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)
你应该反过来做,在script
里面跑screen
:
screen -dm bash -c 'script -c "python test.py" output.txt'
Run Code Online (Sandbox Code Playgroud)