python写shell脚本执行linux命令_使用python执行linux命令

python版本是2.7.12

一、简单的获取linux命令的执行结果,比如:获取一个PID的进程树结构,linux命令是pstree -p pid,在python中有一个模块可以方便的获取。至于有时候获取的结果是乱码的情况,请参考之前的随笔:ubuntu常用的一些命令

命令是 commands.getoutput(cmd),

cmd = "pstree -p %s"%pid

result= commands.getoutput(cmd)

二、开启一个新的进程来执行脚本文件,就需要使用python中另一个模块了,subprocess,

接下来进行简单的函数说明

1 subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)调用进程会等待子进程执行args结束,然后将returncode返回。

2 subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False) 调用进程会等待子进程执行args结束,然后将他的输出以byte string形式返回。注意:如果return code是非零值,将产生一个

如果想以子进程的形式调用命令,则需要使用Popen类。

subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False,shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)

默认情况下,他会开一个子进程,并且是非阻塞。args可以是参数列表[]或者是一个字符串""。shell参数表示是否打开shell执行程序,如果shell参数是True,官方推荐args写成字符串形式。

举个简单例子:

p1=subprocess.Popen("ls",shell=True)

>>> p=subprocess.Popen("ls")

>>> myfile.txt

test.py文件

import time

def fun1():for i in range(1000):

time.sleep(1)if __name__ == "__main__":

fun1()

>>> import subprocess

>>> p2=subprocess.Popen("python test.py",shell=True)

查看进程情况

>>>ps -ef|grep test.py

penchenz 28020 28015 0 15:24 pts/4 00:00:00 python test.py

penchenz 28082 28043 0 15:24 pts/12 00:00:00 grep test.py

执行结果

>>>top -p 28020

top- 15:25:01 up 23 days, 17:49, 20 users, load average: 0.10, 0.09, 0.06Tasks:1 total, 0 running, 1 sleeping, 0 stopped, 0zombie

Cpu(s):1.2%us, 0.6%sy, 0.0%ni, 98.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st

Mem: 32883356k total, 32028992k used, 854364k free, 940836k buffers

Swap: 16515068k total, 214156k used, 16300912k free, 10079088k cached

PID USER PR NI VIRT RES SHR S%CPU %MEM TIME+COMMAND28020 penchenz 20 0 113m 4488 1836 S 0.0 0.0 0:00.05 python

其他更详细的用法请参考subprocess官网地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值