一、sh是什么
SH是一个独特的子进程包装器,可将您的系统程序动态映射到Python函数。SH帮助您用Python编写Shell脚本,既能支持Bash的所有功能(简单的命令调用,简单的管道传输) ,又能兼顾Python的灵活性。
SH是Python中成熟的子进程接口,允许您调用任何系统程序,就好像它是一个函数一样。也就是说,SH让您几乎可以调用任何可以从登录shell运行的命令。
更重要的是,您可以更轻松地捕获和解析命令的输出。
二、使用步骤
1.安装
通过pip命令来安装sh
2.使用示例
启动和运行的最简单方法是直接导入sh或从sh导入您需要的命令。然后,该命令就可以像Python函数一样使用。
比如,传递参数,捕获输出并在python中使用输出。详见下面的代码示例
1 2 3 4 5 6 7 8 9 10 11 12 | import sh
print sh.ifconfig( "eth0" )
from sh import ifconfig
print ifconfig( "eth0" )
print ls( "-l" )
sh.google_chrome( "http://google.com" )
|
子命令的两种写入方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | >>> from sh import git, sudo
>>> print (git.branch( "-v" ))
>>> print (git( "branch" , "-v" ))
>>> print (sudo.ls( "/root" ))
>>> print (sudo( "/bin/ls" , "/root" ))
>>> with sh.contrib.sudo(_with = True ):
print (ls( "/root" ))
from sh import tar
tar( "cvf" , "/tmp/test.tar" , "/my/home/directory/" )
from sh import tar
tar( "cvf /tmp/test.tar /my/home/directory" )
|
3.使用sh执行命令
命令的调用就像函数一样。
但是“需要注意的是,这些不是真正的Python函数,实际运行的是系统中对应的二进制命令,就像Bash一样,通过解析PATH在系统上动态地运行。
也正因为这样,Python对Shell命令的支持非常好,系统上所有命令都可以通过Python轻松运行。”
许多程序都有自己的命令子集,例如git(分支,签出)。
sh通过属性访问处理子命令。
1 2 3 4 5 6 | from sh import git
print (git.branch( "-v" ))
print (git( "branch" , "-v" ))
|
4.关键字参数
关键字参数也可以像您期望的那样工作:它们被替换为命令行参数选项。
1 2 3 4 5 6 7 8 9 10 11 | sh.curl( "http://duckduckgo.com/" , o = "page.html" , silent = True )
sh.curl( "http://duckduckgo.com/" , "-o" , "page.html" , "--silent" )
sh.adduser( "amoffat" , system = True , shell = "/bin/bash" , no_create_home = True )
sh.adduser( "amoffat" , "--system" , "--shell" , "/bin/bash" , "--no-create-home" )
|
5.查找命令
“Which”查找程序的完整路径,如果不存在,则返回None。 该命令是用Python函数真正实现的少数命令之一,因此不依赖于实际存在的”which”二进制程序。
1 2 3 4 | print sh.which( "python" )
print sh.which( "ls" )
if not sh.which( "supervisorctl" ): sh.apt_get( "install" , "supervisor" , "-y" )
|
sh还可以使用更多功能,并且可以找到所有功能。 在里面官方文件。
6.Baking参数
sh可以将”baking”参数用作命令,作用是输出对应的完整命令行字符串,如下面的代码所示:
1 2 3 4 5 6 7 8 | from sh import ls
ls = ls.bake( "-la" )
print (ls)
print (ls( "/" ))
|
ssh+baking命令
在命令上调用”bake”会创建一个可调用对象,该对象会自动传递所有传递给”bake”的参数。
1 2 3 4 5 6 7 | serverX = ssh( "myserver.com" , "-p 1393" , "whoami" )
myserver = sh.ssh.bake( "myserver.com" , p = 1393 )
print (myserver)
|
现在,可调用“myserver”表示一个baking的ssh命令:
1 2 3 4 5 6 | print (myserver.tail( "/var/log/dumb_daemon.log" , n = 100 ))
print myserver.uptime()
15 : 09 : 03 up 61 days, 22 : 56 , 0 users, load average: 0.12 , 0.13 , 0.05
|
以上就是Python之shell脚本怎么使用的详细内容
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。