cari

Rumah  >  Soal Jawab  >  teks badan

php - Tanya tentang masalah pengalihan keluaran proses Linux?

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
过去多啦不再A梦过去多啦不再A梦2822 hari yang lalu415

membalas semua(1)saya akan balas

  • phpcn_u1582

    phpcn_u15822017-05-16 13:10:29

    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 gunakan sys dalam Python 2 .stdout.flush), sama ada gunakan python -u untuk menjalankan skrip atau anda boleh menggantikan sys.stdout. print(..., flush=True) 或者 Python 2 里用 sys.stdout.flush),要么使用 python -u 来运行脚本,要么你去把 sys.stdout 替换掉。

    通常,对标准输出(以及其它除标准错误之外的文件)的输出,默认是带缓冲的,你可以看一下这个教程。对于终端是行缓冲,对于其它设备是块缓冲。标准错误一般是无缓冲的。

    如果要写日志,或者做基于行的持续性输出的话,记得设置相应的缓冲模式(open 函数的 buffer 参数),或者在合适的地方调用 .flush()

    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 fungsi open), atau panggil .flush() dalam yang sesuai letak kaedah. 🎜

    balas
    0
  • Batalbalas