python白色shell-在Python中,如何使用sh(shell脚本)

sh简介?

SH是一个独特的子进程包装器,可将您的系统程序动态映射到Python函数。SH帮助您用Python编写Shell脚本,

既能支持Bash的所有功能(简单的命令调用,简单的管道传输)  ,又能兼顾Python的灵活性。 [资源]

SH是Python中成熟的子进程接口,允许您调用任何系统程序,就好像它是一个函数一样。也就是说,SH让您几乎可以调用任何可以从登录shell运行的命令。

更重要的是,您可以更轻松地捕获和解析命令的输出。

安装

通过pip命令来安装sh

$> pip install sh

用法

启动和运行的最简单方法是直接导入sh或从sh导入您需要的命令。然后,该命令就可以像Python函数一样使用。

比如,传递参数,捕获输出并在python中使用输出。详见下面的代码示例

# get interface information

import sh

print sh.ifconfig("eth0")

from sh import ifconfig

print ifconfig("eth0")

# print the contents of this directory

print ls("-l")

# substitute the dash for an underscore for commands that have dashes in their names

sh.google_chrome("http://google.com")

使用sh执行命令

命令的调用就像函数一样。

但是“需要注意的是,这些不是真正的Python函数,实际运行的是系统中对应的二进制命令,就像Bash一样,通过解析PATH在系统上动态地运行。

也正因为这样,Python对Shell命令的支持非常好,系统上所有命令都可以通过Python轻松运行。”

许多程序都有自己的命令子集,例如git(分支,签出)。

sh通过属性访问处理子命令。

from sh import git

# resolves to "git branch -v"

print(git.branch("-v"))

print(git("branch", "-v")) # the same command

关键字参数

关键字参数也可以像您期望的那样工作:它们被替换为命令行参数选项。 [资源]

# Resolves to "curl http://duckduckgo.com/ -o page.html --silent"

sh.curl("http://duckduckgo.com/", o="page.html", silent=True)

# If you prefer not to use keyword arguments, this does the same thing

sh.curl("http://duckduckgo.com/", "-o", "page.html", "--silent")

# Resolves to "adduser amoffat --system --shell=/bin/bash --no-create-home"

sh.adduser("amoffat", system=True, shell="/bin/bash", no_create_home=True)

# or

sh.adduser("amoffat", "--system", "--shell", "/bin/bash", "--no-create-home")

查找命令

"Which"查找程序的完整路径,如果不存在,则返回None。    该命令是用Python函数真正实现的少数命令之一,

因此不依赖于实际存在的"which"二进制程序。

print sh.which("python") # "/usr/bin/python"

print sh.which("ls") # "/bin/ls"

if not sh.which("supervisorctl"): sh.apt_get("install", "supervisor", "-y")

sh还可以使用更多功能,并且可以找到所有功能。  在里面官方文件。

Baking参数

sh可以将"baking"参数用作命令,作用是输出对应的完整命令行字符串,如下面的代码所示:

# The idea here is that now every call to ls will have the “-la” arguments already specified.

from sh import ls

ls = ls.bake("-la")

print(ls) # "/usr/bin/ls -la"

# resolves to "ls -la /"

print(ls("/"))

ssh+baking命令

在命令上调用"bake"会创建一个可调用对象,该对象会自动传递所有传递给"bake"的参数。

# Without baking, calling uptime on a server would be a lot to type out:

serverX = ssh("myserver.com", "-p 1393", "whoami")

# To bake the common parameters into the ssh command

myserver = sh.ssh.bake("myserver.com", p=1393)

print(myserver) # "/usr/bin/ssh myserver.com -p 1393"

现在,可调用“myserver”表示一个baking的ssh命令:

# resolves to "/usr/bin/ssh myserver.com -p 1393 tail /var/log/dumb_daemon.log -n 100"

print(myserver.tail("/var/log/dumb_daemon.log", n=100))

# check the uptime

print myserver.uptime()

15:09:03 up 61 days, 22:56, 0 users, load average: 0.12, 0.13, 0.05

有关更多高级功能,请参见官方文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值