Wish you all Happy, Prosperous & Pythonic New Year 2019!!
I thank everyone for stopping by my blog for 15K times in 2018 which is the highest so far!
“Looking back at my life’s voyage, I can only say that it has been a good trip.” ~ Ginger Rogers
Similar to the above quote, I’d started my scripting voyage by writing shell, batch and Perl scripts in good old days. I miss some of the awesome, builtin & yet simple to use features available in shell. I felt using those features or builtins would make my life easier while writing scripts in Python…
Besides that, one main reason to look back at the past was while imparting the Python Workshop at my office. One of the participants raised concerns over Python’s builtin modules like OS and Subprocess. They mentioned we can accomplish with very simple steps in ‘Shell’ instead of using OS or Subprocess module. I had to accept the fact that sometimes Python is not so easy as we think!
After googling for a while I finally found this… Say hola to ‘sh‘ Module!
The ‘sh’ library provides simple and intuitive alternative to OS/System/Subprocess modules.
‘sh’ module simplifies Python’s ability to interact with native OS by calling shell commands. This would greatly helps in automation of routine tasks and running sequence of commands, parsing output as per requirement.
Python is a powerful language powered by those great developers who are continuously contributing to enable new features every day in day out. I would like to thank Andrew Moffat for the ‘sh’ library. This library is one of my favourites.
To install this library using PIP, run below command
pip3 install sh
Please find sample scripts output.
>>> import sh
>>> sh.uname()
Darwin
>>> sh.uptime()
7:13 up 11 days, 23:29, 4 users, load averages: 1.51 1.65 1.88
>>>
>>> sh.echo(‘Hello, This is shell\’s echo running from Python’)
Hello, This is shell's echo running from Python
>>> sh.who()
vinay console Dec 21 07:45
vinay ttys000 Dec 21 07:46
vinay ttys001 Dec 21 07:46
vinay ttys003 Jan 2 07:02
>>>sh.df()
Filesystem 512-blocks Used Available Capacity iused ifree %iused Mounted on
/dev/disk1s1 236568496 96124200 131754736 43% 1042911 9223372036853732896 0% /
devfs 376 376 0 100% 653 0 100% /dev
/dev/disk1s4 236568496 6291496 131754736 5% 3 9223372036854775804 0% /private/var/vm
map -hosts 0 0 0 100% 0 0 100% /net
map auto_home 0 0 0 100% 0 0 100% /home
>>> sh.ifconfig()
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
XHC20: flags=0<> mtu 0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether b8:e8:56:36:0b:58
inet6 fe80::149c:1b88:578c:73f8%en0 prefixlen 64 secured scopeid 0x5
inet 192.168.1.9 netmask 0xffffff00 broadcast 192.168.1.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
ether 0a:e8:56:36:0b:58
media: autoselect
status: inactive
awdl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1484
ether 8a:0c:61:9e:64:9b
inet6 fe80::880c:61ff:fe9e:649b%awdl0 prefixlen 64 scopeid 0x7
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
en1: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
options=60<TSO4,TSO6>
ether 72:00:00:20:b1:90
media: autoselect <full-duplex>
status: inactive
en2: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
options=60<TSO4,TSO6>
ether 72:00:00:20:b1:91
media: autoselect <full-duplex>
status: inactive
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=63<RXCSUM,TXCSUM,TSO4,TSO6>
ether 72:00:00:20:b1:90
Configuration:
id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
ipfilter disabled flags 0x2
member: en1 flags=3<LEARNING,DISCOVER>
ifmaxaddr 0 port 8 priority 0 path cost 0
member: en2 flags=3<LEARNING,DISCOVER>
ifmaxaddr 0 port 9 priority 0 path cost 0
nd6 options=201<PERFORMNUD,DAD>
media: <unknown type>
status: inactive
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
inet6 fe80::bd0:9dea:48de:5645%utun0 prefixlen 64 scopeid 0xb
nd6 options=201<PERFORMNUD,DAD>
>>>
Thanks for stopping by, please share your comments and ideas to improve this blog. Keep watching for more Python libraries used for automation.
Like this:
Like Loading...