我有一个 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'