스크립트를 사용하여 분할 화면의 출력을 저장하는 방법은 무엇입니까?

스크립트를 사용하여 분할 화면의 출력을 저장하는 방법은 무엇입니까?

test.py다음만 포함하는 Python 스크립트가 있습니다 print('hi'). screena 의 출력이 screen에 의해 저장 되도록 a 에서 실행하고 싶습니다 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 문자열: -c 옵션이 있으면 문자열에서 명령을 읽습니다. 문자열 뒤에 매개변수가 있으면 $0부터 시작하는 위치 매개변수에 할당됩니다.

스크립트의 매뉴얼 페이지:

-c, --command 대화형 셸 대신 명령 실행

답변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'

관련 정보