如何从Ruby的控制台输出中读取第3行?

时间:2013-12-23 22:45:05

标签: android ruby

我想在控制台读取每一行,然后按" "分割它们。

控制台的输出是:

List of devices attached
0125Mt3B19ct7343    device
07v6584d0a8a6cy7    device

我想在一个阵列中获取Device Ids,因为我将多个Android设备连接到USB集线器。

这是我到目前为止所做的:

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, ... }

1 个答案:

答案 0 :(得分:2)

这是一个未经测试的代码版本,更具惯用性:

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,而Classes和Modules是camelCase。如果您打算发布代码或获得编写Ruby或Rails的工作,请遵循约定。
  • split("\n")[1 .. -1]将从`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打印列表的能力,并使该类只返回设备列表。 YMMV。

Stack Overflow上有很多更聪明的人,他们可以帮助您使用适当的分类法来定义方法的名称等。