本脚本是2.6.6环境下使用的~
####################################################################################
#coding=utf-8
#脚本用途:自动挂载数据盘脚本
#编写时间:2016年8月30日
#脚本作者:乐橙运维组
####################################################################################
#!/usr/bin/env python
#载入模块
import os
import time
from subprocess import Popen, PIPE, STDOUT
#判断磁盘是否存在并开始分区
def fdisk():
AAA=os.path.exists("/dev/xvdb")
if AAA == True:
print "/dev/xvdb存在。"
print "开始制作分区..."
time.sleep(5)
p=Popen(['fdisk', '/dev/xvdb'],stdout=PIPE,stdin=PIPE,stderr=STDOUT)
output = p.communicate(input="n\np\n1\n\n\np\nw\n")
else:
print "/dev/xvdb不存在,程序将退出。"
exit()
#格式化
def format():
os.system("mkfs.ext4 /dev/xvdb1")
#挂载
def mountopt():
name = input('请输入您要挂载的目录,如"/mnt:"')
os.environ['name'] = str(name)
os.system("mount /dev/xvdb1 $name")
print "/dev/xvdb1 已经挂载到"+str(name)+"下!"
os.system("--------------为您显示df -h的结果----------------")
os.system("df -h")
if __name__ == '__main__':
fdisk()
format()
mountopt()
print "整个脚本已经执行完毕,感谢您的使用,下面请根据不同的需求选择下一步P2P的脚本"
这个脚本是面向阿里云的,阿里云初始状态的数据盘就叫/dev/xvdb,金山云好像叫/dev/vdb/,这里可以手动更改。
新的知识点!
由于#fdisk /dev/xvdb这个分区命令需要一次性返回六个值作为交互,所以不能使用传统的方式,这里使用了Popen,话说python的强大和全能在popen这里得到了体现,python果然非常的叼爆。
popen的几个说明文档:Interactive input/output using python
Python subprocess and user interaction
Python - How do I pass a string into subprocess.Popen (using the stdin argument)?
补充一下,如果要是仅仅是一个值的交互,比如说需要多次回车确认:
#echo -e "\n" | ./build-key-server 或者 #echo y | rm file就可以了,也可以把回车神马的写进一个脚本,然后调用这个脚本。
#!/bin/bash
fdisk /dev/xvdb << End
n
p
1
p
w
End
这个就是shell下一次性执行fdisk /dev/xvdb的脚本。
在下面涉及到了python的变量与shell变量的统一,所以使用了
os.environ['name'] = str(name)
把name这个变量在两个程序之间传递了一下。
其实这种自动挂载的脚本很多,但是很多都是用shell写的,估计除了我们这个变态主管之外,没人会硬性要求用python写这玩意。
转载于:https://blog.51cto.com/chenx1242/1844480