Linux正式使用脚本
#!/usr/bin/python
# -*- coding: utf-8 -*-
# filePath = os.system('docker inspect --format="{{(index .Mounts 1).Source}}" storage2')
# groupName = os.system('docker inspect --format="{{index .Config.Env 1}}" storage2')
# dockerName = os.system("docker ps | grep storage | awk '{print $11}'")
import os
import re
import commands
class ReadFilePath(object):
def __init__(self):
self.output_path = './output.txt'
def read_file_full_path(self, path, group_name, cname):
if len(path) > 0:
for dirpath, dirnames, filenames in os.walk(path):
# print(dirpath)# 当前目录路径
# print(dirnames)# 当前路径下所有子目录
# print(filenames)# 当前路径下所有非目录子文件
# print(os.path.join(dirpath, dirnames))# 获取完整目录
# paths = re.search(r'/(.*)', dirpath).group(1) # group(1) 会返回正则表达式中第一个括号内的内容, 以此类推,group(2) 第二个括号
paths = re.search(r'(.*)/%s/(.*)' % cname, dirpath)
if paths is not None:
temp = paths.group(2)
for file in filenames:
if '-m' not in file: # 不要包含.yml的字符串
fullpath = os.path.join(group_name, cname, temp, file) # 拼接groupName+相对路径
self.save_path(fullpath)
def save_path(self, content):
# 3、打开一个文件('a')——有就打开没有就添加
with open(self.output_path, 'a') as f: # ('a')——有就打开没有就添加
f.write(content + '\n')# 向文件中写内容
f.close()# 关闭文件
def resouse(self):
# 如果输入的文件已经存在,则先删除文件
if os.path.exists(self.output_path):
os.remove(self.output_path)
# 1、获取dockerName
(code, data) = commands.getstatusoutput("docker ps | grep storage | awk '{print $11}'")
lists = data.split('\n')
for cname in lists:
print cname
# 2、根据dockerName获取路径
#(code1, path) = commands.getstatusoutput('docker inspect --format="{{(index .Mounts 1).Source}}" %s' % cname)
(code1, path) = commands.getstatusoutput(
"docker inspect --format '{{range .Mounts}}{{if eq \"bind\" .Type}}{{.Source}}{{print}}{{end}}{{end}}' %s " % cname)
print ('data1=', path)
# 3、获取GroupName
(code2, data2) = commands.getstatusoutput('docker exec -it %s env | grep GROUP_NAME=' % cname)
group_name = data2.replace('GROUP_NAME=', "").replace('\r', "")
group_name = len(group_name) > 0 and group_name or "group1"
print ('data2=', group_name)
self.read_file_full_path(path, group_name, cname)
if __name__ == '__main__':
__this = ReadFilePath()
# 启动程序
__this.resouse()
注:python在windows上测试命令程序脚本
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import re
import commands
class ReadFilePath(object):
def __init__(self):
self.output_path = './output.txt'
def read_file_full_path(self, path, group_name, aname):
if len(path) > 0:
for dirpath, dirnames, filenames in os.walk(path):
#print (dirnames)
paths = re.search(r'(.*)/%s/(.*)' % aname, dirpath) # group(1) 会返回正则表达式中第一个括号内的内容,以此类推,group(2) 第二个括号
if paths is not None:
temp = paths.group()
for file in filenames:
if '.yml' not in file:#不要包含.yml的字符串
#print (paths)
#fullpath = os.path.join(group_name, paths, file) # 拼接groupName+相对路径
fullpath = os.path.join(group_name, aname, temp, file) # 拼接groupName+相对路径
#fullpath = os.path.join(group_name + '/' +dirpath, file)
print (fullpath)
self.save_path(fullpath)
def save_path(self, content):
# 3、打开一个文件('a')——有就打开没有就添加
with open(self.output_path, 'a') as f: # ('a')——有就打开没有就添加
# 向文件中写内容
f.write(content + '\n')
# 关闭文件
f.close()
def resouse(self):
lists = ['a', 'b']
# 如果输入的文件已经存在,则先删除文件
if os.path.exists(self.output_path):
os.remove(self.output_path)
for name in lists:
if name == 'a':
path = "F:/prometheus-config"
group_name = "group2"
elif name == 'b':
path = "F:/prometheus-config/data"
group_name = ""
group_name = len(group_name) > 0 and group_name or "group1"
aname = "prometheus-config"
self.read_file_full_path(path, group_name, aname)
if __name__ == '__main__':
__this = ReadFilePath()
# 启动程序
__this.resouse()
最终版:
#!/usr/bin/python
# -*- coding: utf-8 -*-
# filePath = os.system('docker inspect --format="{{(index .Mounts 1).Source}}" storage2')
# groupName = os.system('docker inspect --format="{{index .Config.Env 1}}" storage2')
# dockerName = os.system("docker ps | grep storage | awk '{print $11}'")
import os
import re
import commands
class ReadFilePath(object):
def __init__(self):
self.output_path = './output.txt'
def read_file_full_path(self, path, group_name, cname):
if len(path) > 0:
for dirpath, dirnames, filenames in os.walk(path):
# print(dirpath)# 当前目录路径
# print(dirnames)# 当前路径下所有子目录
# print(filenames)# 当前路径下所有非目录子文件
# print(os.path.join(dirpath, dirnames))# 获取完整目录
# paths = re.search(r'/(.*)', dirpath).group(1) # group(1) 会返回正则表达式中第一个括号内的内容, 以此类推,group(2) 第二个括号
paths = re.search(r'(.*)/data/(.*)', dirpath)
if paths is not None:
temp = paths.group(2)
for file in filenames:
if '-m' not in file: # 不要包含.yml的字符串
fullpath = os.path.join(group_name, 'M00',temp, file) # 拼接groupName+相对路径
self.save_path(fullpath)
def save_path(self, content):
# 3、打开一个文件('a')——有就打开没有就添加
with open(self.output_path, 'a') as f: # ('a')——有就打开没有就添加
f.write(content + '\n')# 向文件中写内容
f.close()# 关闭文件
def resouse(self):
# 如果输入的文件已经存在,则先删除文件
if os.path.exists(self.output_path):
os.remove(self.output_path)
# 1、获取dockerName
(code, data) = commands.getstatusoutput("docker ps | grep storage | awk '{print $11}'")
lists = data.split('\n')
for cname in lists:
print cname
# 2、根据dockerName获取路径 range迭代数据
#(code1, path) = commands.getstatusoutput('docker inspect --format="{{(index .Mounts 1).Source}}" %s' % cname)
(code1, path) = commands.getstatusoutput(
"docker inspect --format '{{range .Mounts}}{{if eq \"bind\" .Type}}{{.Source}}{{print}}{{end}}{{end}}' %s " % cname)
print ('data1=', path)
# 3、获取GroupName
(code2, data2) = commands.getstatusoutput('docker exec -it %s env | grep GROUP_NAME=' % cname)
group_name = data2.replace('GROUP_NAME=', "").replace('\r', "")
group_name = len(group_name) > 0 and group_name or "group1"
print ('data2=', group_name)
self.read_file_full_path(path, group_name, cname)
if __name__ == '__main__':
__this = ReadFilePath()
# 启动程序
__this.resouse()