簡體   English   中英

如何從Ruby的控制台輸出中讀取第3行?

[英]How do I read line 3 from the console output in Ruby?

我想在控制台上閱讀每一行,然后用" "分隔。

控制台上的輸出為:

List of devices attached
0125Mt3B19ct7343    device
07v6584d0a8a6cy7    device

由於要將多個Android設備連接到USB集線器,因此我希望以陣列的形式獲取設備ID。

到目前為止,這是我所做的:

class Init

  $devices = Array.new

  def getDevice

    cmd = "adb devices"
    value = `#{cmd}`
    $deviceCount =  value.lines.count
    puts "#$deviceCount Devices are Connected to the USB Hub"
    puts $deviceCount
..........

  end

上面的代碼無用,因為我無法正確獲取連接設備的數量。 我正在使用lines因為我無法弄清楚還能使用什么。

我想在終端上讀取輸出,並跳過第一行“已連接的設備列表”,然后拆分具有設備ID的以下行,以便將它們插入僅包含設備ID的數組中。

例如:

devices[] = {0125Mt3B19ct7343, 07v6584d0a8a6cy7, ... }

這是未經測試的代碼版本,更加習慣於編寫:

class Devices

  @@devices = []

  def self.get_devices
    @@devices = `adb devices`.split("\n")[1 .. -1]
    device_count = @@devices.size
    puts "#{ device_count } Devices are Connected to the USB Hub"
    puts device_count
  end
end

devices = Devices::get_devices

注意事項:

  • 不要將類命名為“ Init”。 上課應該是一件事情,而不是一個動作。 我參加了一個自由,把它命名為“設備”,這確實是不正確的,因為一類應該是一個單一的東西,但在這種情況下,你正在尋找設備的列表。 DeviceList可能是一個更好的名稱。
  • $devices ...嗯...是完全錯誤的。 除非您了解全局的用途,否則不要使用全局的。 而是使用類變量,例如在名為Devices的類的情況下使用@@devices
  • Array.new非常漂亮,但是沒有完成[]為此目的所做的任何事情,因此請使用更短,更簡潔的[]
  • def getDevice請勿將camelCase用於Ruby方法。 按照約定,方法和變量為snake_case,類和模塊為camelCase。 如果您打算發布代碼或獲得對Ruby或Rails進行編程的工作,請遵循約定。
  • split("\\n")[1 .. -1]將從`adb devices`接收的輸出分為`adb devices`行,並將第二行返回到最后一行。 這意味着您可以立即刪除返回的“連接的設備列表”行。

設計此類界面始終是一種學習經驗。 您可能希望能夠在上次輪詢時獲取設備的當前列表,並且還有另一種方法可以立即獲取當前設備並更新最近見過的設備的變量:

class DeviceList

  @@devices = []

  def self.get_devices
    @@devices = `adb devices`.split("\n")[1 .. -1]
  end

  def self.device_list
    get_devices() if @@devices.empty?
    @@devices
  end

end

devices = DeviceList::get_device_list

device_count = devices.size
puts "#{ device_count } Devices are Connected to the USB Hub"
puts device_count

這使您可以使用Devices::device_list請求當前列表,或使用Devices::get_devices強制重新加載列表。 還要注意,這會從類中刪除輸出並返回列表的大小計數。 這些動作可以在類中發生,但是對於這種類型的代碼,我可能會依賴Ruby的打印列表功能,並使類僅返回設備列表。 因人而異。

Stack Overflow上有很多聰明的人,他們可以幫助您使用正確的分類法來定義方法等的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM