割り込み出力リダイレクト(Pythonスクリプト)

割り込み出力リダイレクト(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を使用してスクリプトを実行しています。印刷ステートメントの順序は正確ですが、最後の2つの印刷ステートメントがありません。

(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"ファイルにリダイレクトしています。最初の数行は画面に印刷され、最後の2行はファイルに印刷されます。なぜすべてをファイルに保存しないのですか?しかも今の順番がめちゃくちゃになりました。ファイルの最初の行(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これはで印刷され、stderrprintPython 2のデフォルト)で印刷されたすべての項目はとして印刷されますstdout

  • printAで欠落している文と画面eprintに表示されている文を実行してください。
  • 文を保存する場合は、実行Bのprint「output.txt」に文を保存してください。eprint
  • nohubは両方ともファイルにstderrリンクしますstdout。したがって、Cを実行すると、すべてが出力ファイルに渡されます。しかし、私はまだその逆の順序を説明できません。

それを使用するだけでeprintすべての問題が解決されました。

ここまでご案内いただいた@Pankiに感謝します。

関連情報