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:**我正在使用預設輸出執行腳本:我的螢幕。print 語句的順序是正確的,但是最後兩個 print 語句失去了:
(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 …)應該在螢幕輸出的最後一行之前(定義案例…)。
(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
我有 80% 的把握,這是 shell 中的問題,而不是我的 python 腳本中的問題。一切都很好,如果是這樣的話。但是,python 腳本正確執行至關重要。
非常感謝任何建議為什麼會發生這種情況以及如何解決它。
我在不知道一個細節的情況下回收了一個 python 腳本:
該腳本在 Python 2 中執行,並將包中的
__future___``eprint``stderr``print``stdout
eprint
要在螢幕上顯示的語句- 在保存語句時將語句
eprint
- nohub 既指向文件
stderr
,也指向stdout
文件。所以在執行 C 中,所有內容都被定向到輸出文件。但是,我仍然無法解釋相反的順序。只有使用
eprint
解決了我所有的問題。感謝@Panki 指導我到這裡