Como posso salvar a saída de uma tela desanexada com script?

6

Eu tenho um script em Python test.py que contém apenas: print('hi') . Desejo executá-lo em screen para que a saída do screen seja salva por script .

Eu uso o seguinte comando para executar test.py em screen , funciona bem:

screen -dm bash -c 'python test.py'

No entanto, ainda não consegui encontrar uma maneira de usar script para salvar a saída de screen . Como posso fazer isso?

Eu tentei sem sucesso:

  • script -c "screen -dm bash -c 'python test.py'" output.txt : o arquivo de saída output.txt não contém hi , mas apenas:

    Script started on Fri 26 Aug 2016 01:04:59 PM EDT
    
    Script done on Fri 26 Aug 2016 01:04:59 PM EDT
    

Eu uso o Ubuntu 14.04.4 LTS x64.

Documentação:

link :

-d -m: Start screen in detached mode. This creates a new session but doesn't attach to it. This is useful for system startup scripts.

link :

-c string: If the -c option is present, then commands are read from string. If there are arguments after the string, they are assigned to the positional parameters, starting with $0.

Página man do script

:

-c, --command run command rather than interactive shell

    
por Franck Dernoncourt 26.08.2016 / 19:11

3 respostas

5

Você deve fazer o contrário, executar script dentro de screen :

screen -dm bash -c 'script -c "python test.py" output.txt'
    
por 26.08.2016 / 19:16
9

Você pode usar o sinalizador -L para criar um arquivo screenlog.0 automático

por exemplo

$ screen -dm -L sh -c 'echo hello'
$ cat screenlog.0 
hello

Se você tiver uma sessão de longa duração que não está sendo registrada, poderá ativar o registro posteriormente

por exemplo

$ screen -dm -S test sh -c 'while [ 1 ]; do date; sleep 1; done'

Agora podemos ativar o registro

$ screen -S test -p 0 -X log

Aguarde algum tempo, porque o log é escrito em blocos e ...

$ 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
    
por 26.08.2016 / 19:27
1

Outra maneira de fazer isso é anexar a tela primeiro:

screen -r <pid or name>

e depois:

Ctrl + A , H

Ele iniciará o login em screenlog.0

    
por 24.10.2018 / 10:06