如何使用Python3.4与Linux shell交互

使用python来运维linux是非常简单轻松的一件事情,但是仅仅是一些交互式比较强的,比shell更灵活的一些工作时,可以使用python,如果是一些简单的查找,排序,等什么的,可以还用shell来完成,下面来看下在python3.4中,如何与Linux交互的。


在python里面可以操作linux的命令有

1,os.system("cmd")
2,os.open("cmd")
3,spawn*
4,subprocess

在最新的python里,推荐使用subprocess来与shell通信,它会生成一个子进程来连接输出,输入,错误等shell下3中标准的输入输出流,并返回执行结果的状态码0和1,来判断本次执行命令的成功与失败。


下面来看一个小例子,首先,确保你的linux环境支持python3.4,如果不支持,你可以参考散仙的 上篇文章来安装python3.4

首先,在linux,执行python命令找到最新的python3.4的路径,然后再py文件里声明头部路径,如果不知道python的具体安装路径,可以使用which python来查找路径
[root@master ~]# py
pydoc              pydoc3.4           python2            python3            python3.4-config   python3.4m-config  pyvenv             
pydoc3             python             python2.6          python3.4          python3.4m         python3-config     pyvenv-3.4         
[root@master ~]# which python3.4
/usr/local/python3.4/bin/python3.4
[root@master ~]# 


写完脚本之后,先给脚本赋值权限,再执行:
[root@master rtt]# chmod +x b.py
[root@master rtt]# cat b.py 
#!/usr/local/python3.4/bin/python3.4


import subprocess as t


v=t.call("ls")



print ("返回值: ",v)

[root@master rtt]# b.py 
a.py  b.py  b.txt
返回值:  0
[root@master rtt]# 


看下面的例子,注意python的shell执行,返回的是一个字符串,如果我们想逐行解析,需要使用如下方法:
[root@master rtt]# cat b.txt 
id name
1 a

2 战三

3 b
[root@master rtt]# cat a.py 
#!/usr/local/python3.4/bin/python3.4

import os
import subprocess as t


#var=t.getoutput("df -h")

#v=t.call("ls")

#var=t.getoutput("cat b.txt | grep a ")
var=t.getoutput("df -h | cat -n ")


for line in var.split("\n"):
    print("这一行:" +line)


#print(var)



[root@master rtt]# a.py 
这一行:     1   Filesystem      Size  Used Avail Use% Mounted on
这一行:     2   /dev/sda2       9.7G  2.9G  6.3G  32% /
这一行:     3   tmpfs           495M     0  495M   0% /dev/shm
这一行:     4   /dev/sda1       194M   28M  157M  15% /boot
这一行:     5   /dev/sda3       9.9G  948M  8.5G  10% /home
[root@master rtt]# 


最后看下python的两种,生成行号的方式:
tt="你好\n哈喽"

for i,it in enumerate(tt.split("\n")):
    print(i,it)

for line in range(len(tt.split("\n"))):
    print(line,"   ",tt.split("\n")[line])



输出结果如下:
0 你好
1 哈喽
0     你好
1     哈喽





你可能感兴趣的:(linux,python)