添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

本文章向大家介绍[Python库]分析一个python库–sh(系统调用),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、sh是什么?

SH是一个独特的子进程包装器,可将您的系统程序动态映射到Python函数。SH帮助您用Python编写Shell脚本,
既能支持Bash的所有功能(简单的命令调用,简单的管道传输) ,又能兼顾Python的灵活性。 [资源]

SH是Python中成熟的子进程接口,允许您调用任何系统程序,就好像它是一个函数一样。也就是说,SH让您几乎可以调用任何可以从登录shell运行的命令。
更重要的是,您可以更轻松地捕获和解析命令的输出。

二、使用步骤

通过pip命令来安装sh

pip install sh

2.使用示例

启动和运行的最简单方法是直接导入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")

子命令的两种写入方式

# 子命令
>>> from sh import git, sudo
>>> print(git.branch("-v"))
>>> print(git("branch", "-v"))
>>> print(sudo.ls("/root"))
>>> print(sudo("/bin/ls", "/root"))
# with 环境
>>> with sh.contrib.sudo(_with=True):
        print(ls("/root"))
# _with=True 关键字告诉命令它正处于 with 环境中, 以便可以正确地运行.
#将多个参数传递给命令时,每个参数必须是一个单独的字符串:
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通过属性访问处理子命令。

from sh import git
# resolves to "git branch -v"
print(git.branch("-v"))
print(git("branch", "-v")) # the same command

4.关键字参数

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

# 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)
sh.adduser("amoffat", "--system", "--shell", "/bin/bash", "--no-create-home")

5.查找命令

“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还可以使用更多功能,并且可以找到所有功能。 在里面官方文件。

6.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

如果想了解更多的内容和功能,可以参考官方文件

参考文章:How to use sh in Python

pythonsh快速入门前言:虽然python有足够多的库来干足够多的事,但是一些基于linux脚本类的小事,还是会觉得用shell脚本要更方便,再但是我就是想用python呀,怎么完美的糅合两者呢?我想sh是一个很好的选择,非常优雅。注:还是那句话,自己手工翻译的,有点粗糙,没有校正,估计也不会校正了,权当练手的参考:https://amoffat.github.io/sh/sh是个很酷的模块... 然后再输入./hello,shsh hello.sh。先给文件添加x权限chmod u+x hello.sh。以下就是Linux下面如何运行.sh文件的总结。执行hello.sh文件。查看目录.sh文件。 4. pycharm terminal 运行sh文件 改为sh.exe所在路径C:\Program Files\Git\bin。在Windows操作系统下运行Shell脚本,缺少的只是一个Git软件。2. 如果windows系统 则需要先下git软件。3. cmd修改路径 (转载)1. 首先得有一个sh文件。的路径添加到系统环境变量。安装之后,将安装路劲下的。 Python sh 库是一个用于执行 Shell 命令和操作的 Python 模块。它提供了简洁的 API,可以在 Python 直接调用各种 Shell 命令,并获得命令执行结果。sh 库的设计目标是让 Python 开发者能够轻松地利用 Python 的强大功能来执行 Shell 脚本操作,而无需直接编写复杂的 Shell 脚本Python sh 库为开发者提供了一个简化 Shell 脚本操作的利器,使得在 Python 执行各种 Shell 命令和操作变得简单而直观。 我们知道,python 在自动化领域被广泛应用,可以很好地自动化处理一些任务,就比如编写 Python 脚本自动化执行重复性的任务,如文件处理、数据处理、系统管理等需要运行其他程序或者与操作系统交互的任务。那么今天我们来看一下在 python 如何运行 shell 命令来与操作系统交互。 在linux系统里shellpython是我们经常用的脚本语言。两者在某些地方有着相似之处,容易记混,这里对两者进行一个总结和归纳。 shellpython :实现自动化运维、一键自动化软件安装、优化、监控报警脚本、软件启动脚本、日志分析脚本等。 shell: 注释方式:单行 # 注释内容 ; 多行 :<<! 备注释内容· python:功能强大、跨平台,爬虫、数据分析、shell能实现的python均能实现。 shell: 今天需要编写一个shell脚本实现App自动生成的功能,需要处理HTTP REST请求,解析JSON,处理文件,执行命令等,本来想用shell搞定,但感觉比较麻烦,还是用python吧,虽然以前用Python都是在树莓派上玩的,多尝试一种方法总是好的。        虽然我受linux的影响甚深,但是对于*nix 里随处可见的sh脚本却是讨厌之极。为什么讨厌呢?首先是因为sh脚本那莫名其妙的语法 直接调用命令,返回值即是系统返回。可以看出,popen方法通过p.read()获取终端输出,而且popen需要关闭close().当执行成功时,close()不返回任何值,失败时,close()返回系统返回值. 可见它获取返回值的方式和os.system不同。例如,在Python安装完成之后都会存在有交互式的编程环境,那么本次将通过程序调用交互式编程环境直接操作python命令行,在python命令行直接输入程序。返回值是依赖于系统的,直接返回系统的调用返回值,所以windows和linux是不一样的。 一、开篇看文章标题, 很高大上。主要介绍 实现一键式自动化操作,具体的操作是:如何快速的创建 PythonShell 文件? 是的,创建 PythonShell 文件是一个很简单的事情,但是如何做到 快速,这恐怕需要动点歪脑筋。我所能想到的常规方法是(Shell为例):1、调取(Go2Shell)终端,touch filename.sh。2、直接使用 IDE 创建。以上两个方法,貌似没...