文档章节

调用系统命令的几种方法

dfkjih
 dfkjih
发布于 2016/01/28 09:56
字数 661
阅读 11
收藏 0
点赞 1
评论 0

1. os.system

In [32]: run = os.system("date")
Thu Jan 28 09:41:25 CST 2016
In [33]: run
Out[33]: 0

只能得到返回值,无法得到输出。

2. os.popen

In [35]: run = os.popen("date")
In [36]: run.read
Out[36]: <function read>
In [37]: run.read()
Out[37]: 'Thu Jan 28 09:43:14 CST 2016\n'

只能得到输出,无法得到返回值。

3. commands模块

In [39]: run = commands.getstatusoutput("date")
In [40]: run
Out[40]: (0, 'Thu Jan 28 09:44:44 CST 2016')

返回一个数组。

4. subprocess模块

4.1 call

In [42]: run = subprocess.call(["uname","-a"], shell=True)
Linux
In [43]: run
Out[43]: 0

直接输出结果,将返回值赋值给变量,类似os.system

4.2 Popen

In [44]: run = subprocess.Popen("uname -a", shell=True,stdout=subprocess.PIPE)
In [48]: run.stdout.read()
Out[48]: 'Linux test-sun207 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux\n'
In [49]: run.wait()
Out[49]: 0

注意: 当执行命令的参数或者返回中包含了中文文字,那么建议使用subprocess,如果使用os.popen则会出现错误。

5. sh模块

安装:pip install sh

In [62]: from sh import ifconfig
In [63]: run = sh.ifconfig
In [64]: run
Out[64]: <Command '/usr/sbin/ifconfig'>
In [65]: run()
Out[65]: 
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.207  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::20c:29ff:fe71:888  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:71:08:88  txqueuelen 1000  (Ethernet)
        RX packets 95617464  bytes 8518940518 (7.9 GiB)
        RX errors 0  dropped 7078520  overruns 0  frame 0
        TX packets 1175268  bytes 172715015 (164.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 191  bytes 58512 (57.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 191  bytes 58512 (57.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
In [67]: run.bake()
Out[67]: <Command '/usr/sbin/ifconfig'>
In [68]: run('lo')
Out[68]: 
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 191  bytes 58512 (57.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 191  bytes 58512 (57.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

执行脚本:

import sh
run = sh.Command("/home/amoffat/run.sh") # Absolute path
run()

多个参数:

from sh import tar
tar("cvf", "/tmp/test.tar", "/my/home/directory")

关键字参数:

# resolves to "curl http://duckduckgo.com/ -o page.html --silent"
curl("http://duckduckgo.com/", o="page.html", silent=True)
# or if you prefer not to use keyword arguments, this does the same thing:
curl("http://duckduckgo.com/", "-o", "page.html", "--silent")
# resolves to "adduser amoffat --system --shell=/bin/bash --no-create-home"
adduser("amoffat", system=True, shell="/bin/bash", no_create_home=True)
# or
adduser("amoffat", "--system", "--shell", "/bin/bash", "--no-create-home")

返回值:

output = ls("/")
print(output.exit_code) # should be 0
#捕获异常:
try: print(ls("/some/non-existant/folder"))
except ErrorReturnCode_2:
    print("folder doesn't exist!")
    create_the_folder()
except ErrorReturnCode:
    print("unknown error")
    exit(1)

###:

In [92]: sh.ls(sh.glob('*.txt'))
Out[92]: requirements.txt

tail:

In [93]: for line in sh.tail("-f", "requirements.txt", _iter=True):
   ....:     print line  #实现其他更好玩的功能
   ....:     
requests==2.9.0
six==1.10.0
slip==0.4.0
#callback实现:
def process_output(line):
    print(line)
p = tail("-f", "/var/log/some_log_file.log", _out=process_output)
p.wait()


© 著作权归作者所有

共有 人打赏支持
dfkjih
粉丝 0
博文 21
码字总数 13951
作品 0
浦东
RunTime.getRunTime().addShutdownHook用法

Runtime.getRuntime().addShutdownHook(shutdownHook); 这个方法的含义说明: 这个方法的意思就是在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShut...

zyqJustin
2016/05/03
25
0
获取命令使用的方法和几个简单的操作命令

获取命令的使用帮助的几种方法: Wha:什么是获取命令的使用帮助? LInux系统不像windows那样的GUI图形操作界面大多数采用的是GLI命令操作界面。我们使用 各种各样的命令对Linux进行操作,就...

Vayne36
2017/10/19
0
0
Linux系统获取命令帮助方法及简单命令介绍

Linux系统中的命令一般分两种:内部命令和外部命令 1.内部命令:内部命令又称为内置命令,在系统启动时就调入内存,是常驻内存的,所以执行效率较高。 2.外部命令:外部命令是系统的软件功能...

sherlockR
06/26
0
0
教程:一起学习Hystrix--Hystrix处理异常机制(降级方法)

目录 降级 异常传递 惊喜 Fallback(降级) 我们可以通过增加一个 fallback (回退)方法在hystrix命令实现优雅降级,如果主命令失败,hystrix可以获取一个默认值或者值集合。我们可能想为更多的...

java_龙
05/18
0
0
Linux 查找文件的几种方法

Linux 查找文件的几种方法 在Linux中查找文件的几种方法 1.linux下最强大的搜索命令为find它的格式为 find <指定目录> <指定条件> <指定动作> 比如使用find命令搜索在根目录下的所有passwd文...

十一11
2016/02/25
20
0
linux下DB2过期几种解决方式

试用的DB2版本一般时间为90天,试用期过后数据库变无法正常打开,提示信息为数据库已过期,为了继续试用,有几种解决方式供大家参考: 1.简单直接的方法——修改linux系统日期,让DB2获取当前...

damomzhang
2013/04/05
0
1
Runtime.getRuntime().exec

用Java编写应用时,有时需要在程序中调用另一个现成的可执行程序或系统命令,这时可以通过组合使用Java提供的Runtime类和Process类的方法实现。下面是一种比较典型的程序模式: ... Process ...

shengguimin
2014/12/22
0
0
Android外置存贮卡路径获取问题的解决方法

一 概述: 不知道谷歌是何原因,把API: Environment.getExternalStorageDirectory() 设计成返回单个路径。这在手机有多个扩展存贮(External Storage)时就出问题了。或者谷歌是想先支持单个...

胖老狼
2015/10/20
989
0
利用环境变量LD_PRELOAD来绕过php disable_function执行系统命令

0x00 前言 在做渗透测试的时候如果遇到安全配置比较好的服务器,当你通过各种途径获得一个php类型的webshell后,却发现面对的是无法执行系统命令的尴尬,因为这类服务器针对命令执行函数做了...

超级大黑猫
05/16
0
0
从安卓开发谈设计模式

1、单例模式 : Aplication 对象 2、Template 模式:集成Activity类后,必须重写父类的方法,并且 父类的方法调用会按一定的顺序自动被调用(onCreate onResume onStop onDestroy) 3、适配器...

在水一方发盐人
2016/11/17
8
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

人工智能你必须掌握的32个算法(二)归并排序算法

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子...

木头释然
8分钟前
0
0
第十四章NFS服务搭建与配置

14.1 NFS介绍 NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netap...

Linux学习笔记
31分钟前
1
0
流利阅读笔记27-20180716待学习

生了娃照样能打,两位母亲温网会师 Lala 2018-07-16 1.今日导读 现今在生儿育女后回归事业的母亲们已经非常多见,但是很少有人想到,以高强度运动与竞争激烈为特色的竞技体育项目也会有 work...

aibinxiao
32分钟前
3
0
Guava 源码分析(Cache 原理【二阶段】)

前言 在上文「Guava 源码分析(Cache 原理)」中分析了 Guava Cache 的相关原理。 文末提到了回收机制、移除时间通知等内容,许多朋友也挺感兴趣,这次就这两个内容再来分析分析。 在开始之前...

crossoverJie
44分钟前
0
0
OSChina 周一乱弹 —— 如果是你喜欢的女同学找你借钱

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @guanglun :分享Michael Learns To Rock的单曲《Fairy Tale》 《Fairy Tale》- Michael Learns To Rock 手机党少年们想听歌,请使劲儿戳(这...

小小编辑
今天
480
16
NNS域名系统之域名竞拍

0x00 前言 其实在官方文档中已经对域名竞拍的过程有详细的描述,感兴趣的可以移步http://doc.neons.name/zh_CN/latest/nns_protocol.html#id30 此处查阅。 我这里主要对轻钱包开发中会用到的...

暖冰
今天
0
0
32.filter表案例 nat表应用 (iptables)

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用 10.15 iptables filter表案例: ~1. 写一个具体的iptables小案例,需求是把80端口、22端口、21 端口放行。但是,22端口我...

王鑫linux
今天
0
0
shell中的函数&shell中的数组&告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析

影夜Linux
今天
0
0
Linux网络基础、Linux防火墙

Linux网络基础 ip addr 命令 :查看网口信息 ifconfig命令:查看网口信息,要比ip addr更明了一些 centos 7默认没安装ifconfig命令,可以使用yum install -y net-tools命令来安装。 ifconfig...

李超小牛子
今天
1
0
[机器学习]回归--Decision Tree Regression

CART决策树又称分类回归树,当数据集的因变量为连续性数值时,该树算法就是一个回归树,可以用叶节点观察的均值作为预测值;当数据集的因变量为离散型数值时,该树算法就是一个分类树,可以很...

wangxuwei
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部