我想從ruby中的標準輸入一次讀取一個字節,但是,如果沒有新的數據可用,我希望方法立即返回,以便each_byte等。對我來說不是一種選擇,就我所知,因爲它們阻止了程序的執行。從標準輸入獲取下一個字節或零 - Ruby
理想的方法將我允許做這樣的事情:
byte = STDIN.next_byte_or_nil
if(byte)
#Process
else
#Do something else
end
如何做到這一點?
我想從ruby中的標準輸入一次讀取一個字節,但是,如果沒有新的數據可用,我希望方法立即返回,以便each_byte等。對我來說不是一種選擇,就我所知,因爲它們阻止了程序的執行。從標準輸入獲取下一個字節或零 - Ruby
理想的方法將我允許做這樣的事情:
byte = STDIN.next_byte_or_nil
if(byte)
#Process
else
#Do something else
end
如何做到這一點?
如果讀操作阻塞,則可以使用,該異常會引發Errno::WOULDBLOCK
異常。因此STDIN.read_nonblock(1) rescue nil
將讀取一個字節而不會阻止或返回nil
。
既然你只使用nil
值,查看呼叫是否成功,你並不真正需要的rescue nil
雖然:
begin
byte = STDIN.read_nonblock(1)
#Process
rescue Errno::WOULDBLOCK
#Do something else
end
getc是你要尋找的方法:
byte = STDIN.getc
if byte
# Process
else
# Do something else
end
你可以嘗試使用readbyte來實現自己的目標。
與其他答案一樣的問題。它只是阻止程序執行,直到用戶鍵入內容。 – 2013-03-18 12:32:07
已輸入但尚未讀取的數據的存在。 – 2013-03-18 12:38:42
不爲我工作。雖然#Process部分正確執行,但第二部分從不執行,因爲getc會等待用戶實際鍵入某些內容,這不是我想要的。 – 2013-03-18 12:30:12