Laksanakan tiga arahan berikut pada terminal bash pada masa ini:
1:php test.php >> test.log
2:python test.py >> test.log
3:sh test.sh >> test.log
Dan laksanakan dalam tetingkap lain:tail -f test.log
1 php dan 3 bash boleh ditulis dalam test.log dalam masa nyata,
Tetapi kenapa python hanya menulis dalam test.log selepas program python tamat?
Dan seperti ini:
gema "cd $test_dir && /usr/bin/python test.py &" >> test_py.sh && sh test_py.sh
Memasukkan python ke dalam skrip sh juga tidak akan berfungsi
Lampiran:
1 ujian.php
<?php
$i = 1;
manakala (Benar) {
tidur(1);
cetak $i++ "\r\n";
jika ($i > 10) {
pecah;
}
}
?>
2 test.py
#!/usr/bin/python
#coding=utf-8
masa import
i = 1
manakala Benar:
i += 1
cetak i
time.sleep(1)
jika saya >
rehat
cetak "----------akhir-----------"
3 test.sh
#!/usr/bin/env bash
# cd /Users/cg/MyFiles/test && /usr/bin/python cgcg.py &
i=1
manakala [[ 1 ]];
tidur 1
i=`expr $i + 1`
bergema $i
selesai
Saya ingin tahu, mengapakah PHP tidak melakukan penimbalan blok dalam kes ini?
Python Jika anda ingin segera melihat output standard peranti selain terminal, anda boleh sama ada siram sendiri (
print(..., flush=True)
atau gunakansys dalam Python 2 .stdout.flush
), sama ada gunakanpython -u
untuk menjalankan skrip atau anda boleh menggantikansys.stdout
.print(..., flush=True)
或者 Python 2 里用sys.stdout.flush
),要么使用python -u
来运行脚本,要么你去把sys.stdout
替换掉。通常,对标准输出(以及其它除标准错误之外的文件)的输出,默认是带缓冲的,你可以看一下这个教程。对于终端是行缓冲,对于其它设备是块缓冲。标准错误一般是无缓冲的。
如果要写日志,或者做基于行的持续性输出的话,记得设置相应的缓冲模式(
Biasanya, output kepada output standard (dan fail lain kecuali ralat standard) ditimbal secara lalai Anda boleh melihat tutorial ini. Ini ialah penimbalan talian untuk terminal dan penimbalan blok untuk peranti lain. Ralat standard biasanya tidak ditimbal. 🎜 🎜Jika anda ingin menulis log atau melakukan output berterusan berasaskan baris, ingat untuk menetapkan mod penimbal yang sepadan (parameter penimbal bagi fungsiopen
函数的 buffer 参数),或者在合适的地方调用.flush()
open
), atau panggil.flush() dalam yang sesuai letak
kaedah. 🎜