mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2025-06-17 00:07:37 +02:00
add lsblk parser
This commit is contained in:
49
README.md
49
README.md
@ -65,6 +65,7 @@ jc [parser] [options]
|
||||
- `--free` enables the `free` parser
|
||||
- `--ifconfig` enables the `ifconfig` parser
|
||||
- `--ls` enables the `ls` parser
|
||||
- `--lsblk` enables the `lsblk` parser
|
||||
- `--netstat` enables the `netstat` parser
|
||||
- `--ps` enables the `ps` parser
|
||||
- `--route` enables the `route` parser
|
||||
@ -261,6 +262,54 @@ $ ls -l /bin | jc --ls -p
|
||||
...
|
||||
]
|
||||
```
|
||||
### lsblk
|
||||
```
|
||||
$ lsblk | jc --lsblk -p
|
||||
[
|
||||
{
|
||||
"NAME": "loop0",
|
||||
"MAJ:MIN": "7:0",
|
||||
"RM": "0",
|
||||
"SIZE": "54.5M",
|
||||
"RO": "1",
|
||||
"TYPE": "loop",
|
||||
"MOUNTPOINT": "/snap/core18/1223"
|
||||
},
|
||||
{
|
||||
"NAME": "sda",
|
||||
"MAJ:MIN": "8:0",
|
||||
"RM": "0",
|
||||
"SIZE": "20G",
|
||||
"RO": "0",
|
||||
"TYPE": "disk"
|
||||
},
|
||||
{
|
||||
"NAME": "sda1",
|
||||
"MAJ:MIN": "8:1",
|
||||
"RM": "0",
|
||||
"SIZE": "1M",
|
||||
"RO": "0",
|
||||
"TYPE": "part"
|
||||
},
|
||||
{
|
||||
"NAME": "sda2",
|
||||
"MAJ:MIN": "8:2",
|
||||
"RM": "0",
|
||||
"SIZE": "20G",
|
||||
"RO": "0",
|
||||
"TYPE": "part",
|
||||
"MOUNTPOINT": "/"
|
||||
},
|
||||
{
|
||||
"NAME": "sr0",
|
||||
"MAJ:MIN": "11:0",
|
||||
"RM": "1",
|
||||
"SIZE": "64.8M",
|
||||
"RO": "0",
|
||||
"TYPE": "rom"
|
||||
}
|
||||
]
|
||||
```
|
||||
### netstat
|
||||
```
|
||||
$ netstat -p | jc --netstat -p
|
||||
|
@ -4,6 +4,7 @@ jc changelog
|
||||
- Add env parser
|
||||
- Add df parser
|
||||
- Add free parser
|
||||
- Add lsblk parser
|
||||
|
||||
20191021 v0.6.4
|
||||
- Flatten netstat parser output
|
||||
|
5
jc/jc.py
5
jc/jc.py
@ -11,6 +11,7 @@ import jc.parsers.env
|
||||
import jc.parsers.free
|
||||
import jc.parsers.ifconfig
|
||||
import jc.parsers.ls
|
||||
import jc.parsers.lsblk
|
||||
import jc.parsers.netstat
|
||||
import jc.parsers.ps
|
||||
import jc.parsers.route
|
||||
@ -38,6 +39,9 @@ def main():
|
||||
elif '--ls' in sys.argv:
|
||||
result = jc.parsers.ls.parse(data)
|
||||
|
||||
elif '--lsblk' in sys.argv:
|
||||
result = jc.parsers.lsblk.parse(data)
|
||||
|
||||
elif '--netstat' in sys.argv:
|
||||
result = jc.parsers.netstat.parse(data)
|
||||
|
||||
@ -56,6 +60,7 @@ def main():
|
||||
print(' --free free parser', file=sys.stderr)
|
||||
print(' --ifconfig iconfig parser', file=sys.stderr)
|
||||
print(' --ls ls parser', file=sys.stderr)
|
||||
print(' --lsblk lsblk parser', file=sys.stderr)
|
||||
print(' --netstat netstat parser', file=sys.stderr)
|
||||
print(' --ps ps parser', file=sys.stderr)
|
||||
print(' --route route parser\n', file=sys.stderr)
|
||||
|
70
jc/parsers/lsblk.py
Normal file
70
jc/parsers/lsblk.py
Normal file
@ -0,0 +1,70 @@
|
||||
"""jc - JSON CLI output utility lsblk Parser
|
||||
|
||||
Usage:
|
||||
specify --lsblk as the first argument if the piped input is coming from lsblk
|
||||
|
||||
Example:
|
||||
|
||||
$ lsblk | jc --lsblk -p
|
||||
[
|
||||
{
|
||||
"NAME": "loop0",
|
||||
"MAJ:MIN": "7:0",
|
||||
"RM": "0",
|
||||
"SIZE": "54.5M",
|
||||
"RO": "1",
|
||||
"TYPE": "loop",
|
||||
"MOUNTPOINT": "/snap/core18/1223"
|
||||
},
|
||||
{
|
||||
"NAME": "sda",
|
||||
"MAJ:MIN": "8:0",
|
||||
"RM": "0",
|
||||
"SIZE": "20G",
|
||||
"RO": "0",
|
||||
"TYPE": "disk"
|
||||
},
|
||||
{
|
||||
"NAME": "sda1",
|
||||
"MAJ:MIN": "8:1",
|
||||
"RM": "0",
|
||||
"SIZE": "1M",
|
||||
"RO": "0",
|
||||
"TYPE": "part"
|
||||
},
|
||||
{
|
||||
"NAME": "sda2",
|
||||
"MAJ:MIN": "8:2",
|
||||
"RM": "0",
|
||||
"SIZE": "20G",
|
||||
"RO": "0",
|
||||
"TYPE": "part",
|
||||
"MOUNTPOINT": "/"
|
||||
},
|
||||
{
|
||||
"NAME": "sr0",
|
||||
"MAJ:MIN": "11:0",
|
||||
"RM": "1",
|
||||
"SIZE": "64.8M",
|
||||
"RO": "0",
|
||||
"TYPE": "rom"
|
||||
}
|
||||
]
|
||||
"""
|
||||
|
||||
|
||||
def parse(data):
|
||||
|
||||
# code adapted from Conor Heine at:
|
||||
# https://gist.github.com/cahna/43a1a3ff4d075bcd71f9d7120037a501
|
||||
|
||||
cleandata = data.splitlines()
|
||||
headers = [h for h in ' '.join(cleandata[0].strip().split()).split() if h]
|
||||
|
||||
raw_data = map(lambda s: s.strip().split(None, len(headers) - 1), cleandata[1:])
|
||||
output = [dict(zip(headers, r)) for r in raw_data]
|
||||
|
||||
for entry in output:
|
||||
entry['NAME'] = entry['NAME'].encode('ascii', errors='ignore').decode()
|
||||
|
||||
return output
|
Reference in New Issue
Block a user