ปัญหาในการอ่านจากซ็อกเก็ต


1

ฉันมีโปรแกรมสตรีมมิ่งประกายไฟที่อ่านข้อมูลจากซ็อกเก็ตที่ฉันอยากใช้:

nc -lk 9999

โปรแกรมอ่านข้อมูลจากซ็อกเก็ตและแยกข้อความ "ข้อผิดพลาด" เมื่อฉันเขียนด้วยตนเองในซ็อกเก็ตมันทำงานได้ดี
ฉันได้สร้างสคริปต์ python ที่พิมพ์ข้อความ "Error" บ่อยครั้ง ฉันจะบันทึกผลลัพธ์ในไฟล์โดยใช้:

stdbuf -oL python my_script.py &>> my_file.txt

และอ่านไฟล์จากซ็อกเก็ต:

nc -lk 9999 | tail -f my_file.txt

ทุกสิ่งก็โอเคซ็อกเก็ตจะอ่านข้อมูลจากไฟล์ในขณะที่ไฟล์กำลังถูกอัปเดตบนพื้นหลัง แต่ปัญหาคือโปรแกรมประกายไฟของฉันไม่จับข้อความ "ข้อผิดพลาด"
โดยสรุป: เมื่อฉันเขียนข้อความ "ข้อผิดพลาด" ในซ็อกเก็ตด้วยตนเองจุดประกายจับพวกเขา แต่จะไม่จับข้อความ "ข้อผิดพลาด" ที่สร้างโดยสคริปต์หลามจากซ็อกเก็ต
ที่จริงแล้วโปรแกรมไม่ทำงานถ้าฉันอ่านไฟล์จากซ็อกเก็ตแทนที่จะพิมพ์ลงไป
อะไรคือความแตกต่าง?

คำตอบ:


1

คำสั่งที่คุณพิมพ์

nc -lk 9999 | tail -f my_file.txt

หมายถึงใช้การส่งออกของท่อที่netcat tail -f my_file.txtแต่tailไม่ยอมรับอินพุตใด ๆ มันแค่ดูไฟล์my_file.txtเท่านั้น ลอง

tail -f my_file.txt | nc -lk 9999

แทนเพื่อให้การส่งออกของจะถูกป้อนเข้าtailnc


ยินดี. เพียงแค่ทราบ: บางทีมันอาจจะง่ายกว่าที่จะใช้ไพพ์ที่มีชื่อในกรณีของคุณหรือ (จากคำถามก่อนหน้าเกี่ยวกับ rsyslog ) rsyslogเขียนโดยตรงไปยังmy_file.txtแทนที่จะเป็นซ็อกเก็ต แค่ความคิด แต่บางทีฉันไม่เข้าใจการตั้งค่าของคุณอย่างสมบูรณ์
PerlDuck

เป็นความคิดที่ดีที่เพื่อนของฉันคำตอบของคุณสำหรับคำถามก่อนหน้านี้ทำงานได้ดีมาก ขณะที่ผมจำเป็นต้องสร้างกระแสของข้อความในช่วงเวลาสั้น ๆ rsyslogฉันได้ใช้สคริปต์นี้จะทำอย่างนั้นแทน ขอขอบคุณอีกครั้ง
Ali Majed HA
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.