sourcecode

출력 파일에 로그를 쓰는 중이 아닙니다.

codebag 2023. 6. 12. 21:21
반응형

출력 파일에 로그를 쓰는 중이 아닙니다.

다음 명령을 사용하여 백그라운드에서 파이썬 스크립트를 실행하고 있습니다.

nohup ./cmd.py > cmd.log &

그러나 로그 파일에 아무것도 쓰지 않는 것으로 나타납니다. cmd.log가 생성되지만 항상 비어 있습니다.파이썬 스크립트에서 사용 중입니다.sys.stdout.write대신에print표준 출력으로 인쇄합니다.제가 잘못한 게 있나요?

에서 Python을 실행할 수 있습니다.-u출력 버퍼링을 방지하기 위한 플래그:

nohup python -u ./cmd.py > cmd.log &

주기적으로 STDout을 플러시해야 하는 것 같습니다(예:sys.stdout.flush()제 테스트에서는 Python이 자동으로 이를 수행하지 않습니다.print프로그램이 종료될 때까지

  • 사용.-u와 함께nohup저를 위해 일했습니다.사용.-u강요할 것입니다.stdout,stderr버퍼링 해제할 스트림그것은 stdin에 영향을 미치지 않을 것입니다.모든 내용이 "nohup.out" 파일에 저장됩니다.이런 식으로...

    nohup python -u your_code.py &
    

    디렉토리에 저장할 수도 있습니다.이쪽으로...

    nohup python -u your_code.py > your_directory/nohup.out &
    
  • 또한 사용할 수 있습니다.PYTHONUNBUFFERED빈 문자열이 아닌 문자열로 설정하면 다음과 동일하게 작동합니다.-u선택.이 명령을 사용하는 경우 파이썬 코드를 실행하기 전에 아래 명령을 실행합니다.

    export PYTHONUNBUFFERED=1
    

    또는

    export PYTHONUNBUFFERED=TRUE
    

추신 cron-job과 같은 도구를 사용하여 백그라운드에서 실행하고 예약된 실행을 제안합니다.

export PYTHONUNBUFFERED=1
nohup ./cmd.py > cmd.log &

또는

nohup python -u ./cmd.py > cmd.log &

https://docs.python.org/2/using/cmdline.html#cmdoption-u

Python 3.3 이상에는 인쇄할 플러시 인수가 있으며 이것이 나에게 효과적인 유일한 방법입니다.

print("number to train = " + str(num_train), flush=True)
print("Using {} evaluation batches".format(num_evals), flush=True)

저도 비슷한 문제가 있었지만 파이썬 프로세스와 연결되지 않았습니다.나는 nohup을 하는 스크립트를 실행하고 있었고 스크립트는 cron을 통해 주기적으로 실행되었습니다.

다음을 통해 문제를 해결할 수 있었습니다.

  1. stdin, stdout 및 stderr 리디렉션
  2. nohup을 통해 호출되는 스크립트가 백그라운드에서 다른 스크립트를 실행하지 않았는지 확인

PS: 내 스크립트는 RHEL에서 실행되는 ksh로 작성되었습니다.

스크립트는 다음과 같은 방식으로 실행되며 전혀 문제가 없습니다.

nohup python my_script.py &> my_script.out &

구문과 비교하면 입력 후 & 기호만 누락된 것 같습니다.

언급URL : https://stackoverflow.com/questions/12919980/nohup-is-not-writing-log-to-output-file

반응형