คำถามติดแท็ก stdin

อินพุตมาตรฐาน (stdin, file descriptor 0) คืออินพุตสตรีมไปยังโปรแกรม

6
อ่านอย่างต่อเนื่องจาก STDOUT ของกระบวนการภายนอกใน Ruby
ฉันต้องการเรียกใช้เครื่องปั่นจากบรรทัดคำสั่งผ่านสคริปต์ทับทิมซึ่งจะประมวลผลผลลัพธ์ที่ได้รับจากเครื่องปั่นทีละบรรทัดเพื่ออัปเดตแถบความคืบหน้าใน GUI ไม่สำคัญจริงๆที่เครื่องปั่นเป็นกระบวนการภายนอกที่ฉันต้องอ่าน stdout ดูเหมือนว่าฉันไม่สามารถจับข้อความความคืบหน้าเครื่องปั่นที่พิมพ์ไปยังเชลล์ได้ตามปกติเมื่อกระบวนการเครื่องปั่นยังคงทำงานอยู่และฉันได้ลองหลายวิธีแล้ว ฉันดูเหมือนจะเข้าถึง stdout ของเครื่องปั่นเสมอหลังจากที่เครื่องปั่นเลิกทำงานไม่ใช่ในขณะที่ยังทำงานอยู่ นี่คือตัวอย่างของความพยายามที่ล้มเหลว รับและพิมพ์ 25 บรรทัดแรกของผลลัพธ์ของเครื่องปั่น แต่หลังจากออกจากกระบวนการเครื่องปั่นแล้วเท่านั้น: blender = nil t = Thread.new do blender = open "| blender -b mball.blend -o //renders/ -F JPEG -x 1 -f 1" end puts "Blender is doing its job now..." 25.times { puts blender.gets} แก้ไข: เพื่อให้ชัดเจนขึ้นเล็กน้อยคำสั่งที่เรียกใช้เครื่องปั่นจะส่งกระแสข้อมูลกลับมาในเชลล์ซึ่งระบุความคืบหน้า (ส่วนที่ …
86 ruby  shell  process  stdout  stdin 


4
ฉันจะ "สกัดกั้น" Ctrl + C ในแอปพลิเคชัน CLI ได้อย่างไร
ฉันจะดักจับ Ctrl + C(ซึ่งปกติจะฆ่ากระบวนการ) ในแอปพลิเคชัน Java CLI (อินเตอร์เฟสบรรทัดคำสั่ง) ได้อย่างไร มีโซลูชันหลายแพลตฟอร์ม (Linux, Solaris, Windows) หรือไม่ ฉันใช้Console's readLine()แต่ถ้าจำเป็นฉันสามารถใช้วิธีการอื่นในการอ่านตัวอักษรจากอินพุตมาตรฐาน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.