我想在控制台读取每一行,然后按" "
分割它们。
控制台的输出是:
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, ... }
答案 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
要注意的事项:
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上有很多更聪明的人,他们可以帮助您使用适当的分类法来定义方法的名称等。