인터럽트 출력 리디렉션(Python 스크립트)

인터럽트 출력 리디렉션(Python 스크립트)

나도 똑같이 달리고 있어파이썬 스크립트자꾸출력 리디렉션다양한 방법으로 얻고출력이 손상되었습니다.. 때때로누락된 줄때때로순서가 반대네요. Python 스크립트에는 출력 파일로 인쇄하려는 여러 인쇄 문이 포함되어 있습니다.

먼저 출력이 어떻게 나타나는지 보여 드리겠습니다.

Number of haplotypes: 400000,400000,400000
Number of trees: 2946715
Number of mutations: 3454912
Sequence length: 62949445.0
True PRS read from file: ../data/prs_true/prs.prs_true. 600000 lines imported.
Defining cases/controls [2020-07-27 23:26:09]
Case control variables saved to ../data/case_control/c_c.case_control.pickle.
End

A 실행:기본 출력인 my screen을 사용하여 스크립트를 실행하고 있습니다. 인쇄 문의 순서는 정확하지만 마지막 두 인쇄 문이 누락되었습니다.

(genPy2) [user@vm code]$ python simulate_prs_py2.py --tree ../data/tree/tree.hdf5 --true_prs ../data/prs_true/prs.prs_true --ncausal=200 --h2=0.33 --out ../data/case_control/sim_full
Number of haplotypes: 400000,400000,400000
Number of trees: 2946715
Number of mutations: 3454912
Sequence length: 62949445.0
True PRS read from file: ../data/prs_true/prs.prs_true. 600000 lines imported.
Defining cases/controls [2020-07-27 23:24:48]

B 실행:이제 동일한 스크립트를 실행하고 출력을 "output.txt" 파일로 리디렉션하고 있습니다. 이제 처음 몇 줄은 화면에 인쇄되고 마지막 두 줄은 파일에 인쇄됩니다. 왜 모든 것을 파일에 저장하지 않습니까? 게다가 이제 순서가 엉망이 되었습니다. 파일의 첫 번째 줄(True PRS...)이 화면 출력의 마지막 줄(Define Case...) 앞에 와야 합니다.

(genPy2) [user@vm code]$ python simulate_prs_py2.py --tree ../data/tree/tree.hdf5 --true_prs ../data/prs_true/prs.prs_true --ncausal=200 --h2=0.33 --out ../data/case_control/sim_full > output.txt
Number of haplotypes: 400000,400000,400000
Number of trees: 2946715
Number of mutations: 3454912
Sequence length: 62949445.0
Defining cases/controls [2020-07-27 23:25:22]
(genPy2) [user@vm code]$ cat output.txt 
True PRS read from file: ../data/prs_true/prs.prs_true. 600000 lines imported.
Case control variables saved to ../data/case_control/c_c.case_control.pickle.
End

C를 실행하세요:이제 nohup을 사용하고 출력을 "../data/case_control/output.txt" 파일에 저장합니다. 이제 모든 출력이 출력 파일로 리디렉션되지만 "True PRS..." 및 "Defining Cases..." 문은 여전히 ​​역순입니다.

(genPy2) [user@vm code]$ nohup python simulate_prs_py2.py --tree ../data/tree/tree.hdf5 --true_prs ../data/prs_true/prs.prs_true --ncausal=200 --h2=0.33 --out ../data/case_control/sim_full > ../data/case_control/output.txt
nohup: ignoring input and redirecting stderr to stdout

(genPy2) [user@vm code]$ cat ../data/case_control/output.txt 
Number of haplotypes: 400000,400000,400000
Number of trees: 2946715
Number of mutations: 3454912
Sequence length: 62949445.0
Defining cases/controls [2020-07-27 23:26:09]
True PRS read from file: ../data/prs_true/prs.prs_true. 600000 lines imported.
Case control variables saved to ../data/case_control/c_c.case_control.pickle.
End

나는 이것이 내 Python 스크립트가 아니라 셸의 문제라고 80% 확신합니다. 그렇다면 모든 것이 괜찮습니다. 그러나 Python 스크립트가 올바르게 실행되는 것이 중요합니다.

이런 일이 발생하는 이유와 해결 방법에 대한 제안을 주시면 감사하겠습니다.

답변1

세부 사항을 모르고 Python 스크립트를 재활용했습니다.

스크립트는 Python 2에서 실행되며 print패키지에서 함수를 로 가져옵니다 __future___. eprint이는 로 인쇄되고, stderr( printPython 2 기본값)로 인쇄되는 모든 항목은 로 인쇄됩니다 stdout.

  • printA에서 누락된 명령문과 화면 eprint에 표시된 명령문을 실행하십시오.
  • 명령문을 저장할 때 실행 B의 print"output.txt"에 명령문을 저장하십시오.eprint
  • nohub는 둘 다 파일로 stderr연결합니다 stdout. 따라서 C를 실행하면 모든 것이 출력 파일로 전달됩니다. 그러나 나는 아직도 그 반대 순서를 설명할 수 없다.

그것을 사용하는 것만으로도 eprint모든 문제가 해결되었습니다.

여기까지 안내해주신 @Panki에게 감사드립니다.

관련 정보