Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Auto Generate Command Line

Auto Generate Command Line

作者头像
franket
发布于 2021-08-11 01:42:11
发布于 2021-08-11 01:42:11
35500
代码可运行
举报
文章被收录于专栏:技术杂记技术杂记
运行总次数:0
代码可运行

前言

Openpyxl 是一个用来读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的开源库

A Python library to read/write Excel 2010 xlsx/xlsm files

这里演示一下如何傅用 Openpyxl 来构建一个自动生成命令行的小脚本

Tip: 当前的版本为 openpyxl-2.5.1


操作

环境

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@56-201 ~]# hostnamectl 
   Static hostname: 56-201
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 33dc28f7e76c4903ad9b603b77e29a7c
           Boot ID: b278707b56304e11a4f30711cf56d76b
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-514.21.1.el7.x86_64
      Architecture: x86-64
[root@56-201 ~]# ip a 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:0e:38:94 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3
       valid_lft 81534sec preferred_lft 81534sec
    inet6 fe80::2bb7:5b3:9584:d8eb/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:bb:5d:54 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.201/24 brd 192.168.56.255 scope global enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:febb:5d54/64 scope link 
       valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
    link/ether 52:54:00:16:5e:11 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
    link/ether 52:54:00:16:5e:11 brd ff:ff:ff:ff:ff:ff
[root@56-201 ~]# 

表格

安装 openpyxl

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@56-201 ~]# pip install openpyxl
Collecting openpyxl
Collecting et-xmlfile (from openpyxl)
  Using cached et_xmlfile-1.0.1.tar.gz
Collecting jdcal (from openpyxl)
  Using cached jdcal-1.3.tar.gz
Building wheels for collected packages: et-xmlfile, jdcal
  Running setup.py bdist_wheel for et-xmlfile ... done
  Stored in directory: /root/.cache/pip/wheels/99/f6/53/5e18f3ff4ce36c990fa90ebdf2b80cd9b44dc461f750a1a77c
  Running setup.py bdist_wheel for jdcal ... done
  Stored in directory: /root/.cache/pip/wheels/0f/63/92/19ac65ed64189de4d662f269d39dd08a887258842ad2f29549
Successfully built et-xmlfile jdcal
Installing collected packages: et-xmlfile, jdcal, openpyxl
Successfully installed et-xmlfile-1.0.1 jdcal-1.3 openpyxl-2.5.1
[root@56-201 ~]# 

编写脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@56-201 sf_usb]# vim generate_option.py 
[root@56-201 sf_usb]# cat generate_option.py 
#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-

#import
import os
from optparse import OptionParser
from openpyxl import load_workbook

#args parser
usage =  "Usage: %prog <-f xlsx> [options] arg"
parser = OptionParser(usage)
parser.add_option("-f","--xlsx",dest="xlsx",action="store",type="string",help="(mandatory)the xlsx file ready to read")
parser.add_option("-e","--command",dest="command",default="",action="store",type="string",help="command line before each option and its value, default is '%default'")
parser.add_option("-p","--prefix",dest="prefix",default="-",action="store",type="string",help="prefix of each option, default is '%default'")
parser.add_option("-c","--confix",dest="confix",default="=",action="store",type="string",help="confix between each option and its value, default is '%default'")
(options,args)=parser.parse_args()

#check args
if options.xlsx == None:
    exit("Error: you need to specified target xlsx file to be read")
if not os.path.exists(options.xlsx):
    exit("Error: %s not found"%options.xlsx)
    
#prepare args
prefix=str(options.prefix).strip()
confix=str(options.confix)
command=str(options.command).strip()

#read only mode load workbook
wb=load_workbook(filename=options.xlsx, read_only=True)

#get active work sheet (first work sheet)
ws=wb.active

#generate command lines
def generate_cli(worksheet):
    ws=worksheet
    for row in ws[2:ws.max_row]:
        if command != '':
            print('%s'%command,end=" ")
        for cv in map(lambda x,y: '%s%s%s"%s"'%(prefix,x,confix,y),[str(x.value).strip() for x in ws[1]],[str(y.value).strip() for y in row]):
            print('%s'%cv,end=" ")
        print("") 

#main
if __name__ == "__main__":
    generate_cli(ws)
[root@56-201 sf_usb]# 

测试脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@56-201 sf_usb]# ./generate_option.py -h
Usage: generate_option.py <-f xlsx> [options] arg

Options:
  -h, --help            show this help message and exit
  -f XLSX, --xlsx=XLSX  (mandatory)the xlsx file ready to read
  -e COMMAND, --command=COMMAND
                        command line before each option and its value, default
                        is ''
  -p PREFIX, --prefix=PREFIX
                        prefix of each option, default is '-'
  -c CONFIX, --confix=CONFIX
                        confix between each option and its value, default is
                        '='
[root@56-201 sf_usb]# ./generate_option.py --help
Usage: generate_option.py <-f xlsx> [options] arg

Options:
  -h, --help            show this help message and exit
  -f XLSX, --xlsx=XLSX  (mandatory)the xlsx file ready to read
  -e COMMAND, --command=COMMAND
                        command line before each option and its value, default
                        is ''
  -p PREFIX, --prefix=PREFIX
                        prefix of each option, default is '-'
  -c CONFIX, --confix=CONFIX
                        confix between each option and its value, default is
                        '='
[root@56-201 sf_usb]# ./generate_option.py 
Error: you need to specified target xlsx file to be read
[root@56-201 sf_usb]# ./generate_option.py -f /tmp/test.xlsx 
-a="1" -b="2" -c="3" -d="4" 
-a="5" -b="6" -c="7" -d="8" 
[root@56-201 sf_usb]# ./generate_option.py -f /tmp/test1.xlsx 
Error: /tmp/test1.xlsx not found
[root@56-201 sf_usb]# ./generate_option.py -f /tmp/test.xlsx -e cli
cli -a="1" -b="2" -c="3" -d="4" 
cli -a="5" -b="6" -c="7" -d="8" 
[root@56-201 sf_usb]# ./generate_option.py -f /tmp/test.xlsx -e cli -p --
cli --a="1" --b="2" --c="3" --d="4" 
cli --a="5" --b="6" --c="7" --d="8" 
[root@56-201 sf_usb]# ./generate_option.py -f /tmp/test.xlsx -e cli -p -- -c ' '
cli --a "1" --b "2" --c "3" --d "4" 
cli --a "5" --b "6" --c "7" --d "8" 
[root@56-201 sf_usb]# ./generate_option.py -f /tmp/test.xlsx -e cli -p -- -c :
cli --a:"1" --b:"2" --c:"3" --d:"4" 
cli --a:"5" --b:"6" --c:"7" --d:"8" 
[root@56-201 sf_usb]# ./generate_option.py -f /tmp/test.xlsx -e '   cli   '    -p '  ++    ' -c :
cli ++a:"1" ++b:"2" ++c:"3" ++d:"4" 
cli ++a:"5" ++b:"6" ++c:"7" ++d:"8" 
[root@56-201 sf_usb]# ./generate_option.py -f /tmp/test.xlsx -e cli  -c ' '
cli -a "1" -b "2" -c "3" -d "4" 
cli -a "5" -b "6" -c "7" -d "8" 
[root@56-201 sf_usb]# 

分别针对每个选项做了不同测试,结果都符合预期

可以使用此脚本轻松地批量生成命令了


总结

这个脚本是在将第一行作为参数名,后面每行作为参数值,然后接合指定的命令来拼接出一个完整的命令

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Write xlsx with Openpyxl
Openpyxl 是一个用来读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的开源库
franket
2021/08/11
1.5K0
Install Cobbler
可以实现 Linux 的自动化部署与初始化配置,在需要安装大量 OS 的场景下,可以极大提升效率
franket
2021/08/11
1.3K0
使用 script 实现 terminal 同屏
在 linux 系统中,有一个神器 script 命令,可以用来记录所有 CLI 终端的交互记录
franket
2021/08/12
4220
Read xlsx with Openpyxl
Openpyxl 是一个用来读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的开源库
franket
2021/08/11
1.5K0
k8s1.13.0二进制部署-flannel网络(二)
Overlay Network:覆盖网络,在基础网络上叠加的一种虚拟网络技术模式,该网络中的主机通过虚拟链路连接起来。 VXLAN:将源数据包封装到UDP中,并使用基础网络的IP/MAC作为外层报文头进行封装,然后在以太网上传输,到达目的地后由隧道端点解封装并将数据发送给目标地址。 Flannel:是Overlay网络的一种,也是将源数据包封装在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VXLAN、AWS VPC和GCE路由等数据转发方式。
yuezhimi
2020/09/30
6660
k8s1.13.0二进制部署-flannel网络(二)
Keepalived LVS NAT
LVS 只实现到了四层,Keepalived 可以实现七层的简单检查,Keepalived 可以通过预设的检查逻辑来管理 LVS 配置,从而实现对 LVS 自动且动态的调配,让整个 LB 系统更加灵活且健壮
franket
2021/08/10
1.6K0
深入学习Docker网络(看这篇就完全够了)
通过上述,将宿主机上的所有容器都连接到这个内部网络上,两个容器在同一个网络下,会从这个网关下各自拿到分配的ip,此时两个容器的网络是互通的。
小熊学Java
2023/07/16
1.4K0
深入学习Docker网络(看这篇就完全够了)
Install X-Pack
参考 Installing X-Pack in Elasticsearch 和 Install X-Pack
franket
2021/08/11
5810
Docker容器网络
Docker在安装后自动提供3种网络,可以使用``docker network ls`命令查看
Alone-林
2022/08/23
5370
Docker容器网络
Docker网络解决方案-Flannel部署记录
Docker跨主机容器间网络通信实现的工具有Pipework、Flannel、Weave、Open vSwitch(虚拟交换机)、Calico实现跨主机容器间的通信。其中Pipework、Weave、Flannel,三者的区别是: Weave的思路 在每个宿主机上布置一个特殊的route的容器,不同宿主机的route容器连接起来。 route拦截所有普通容器的ip请求,并通过udp包发送到其他宿主机上的普通容器。 这样在跨机的多个容器端看到的就是同一个扁平网络。 weave解决了网络问题,不过部署依然是单
洗尽了浮华
2018/01/23
2.2K0
Docker网络解决方案-Flannel部署记录
云原生时代必须具备的核心技能之Docker高级篇(Docker网络详解)
  前面给大家项目的介绍了Docker的基础内容 Docker基础篇 接下来给大家系统的介绍下Docker高级篇的内容:网络核心、Docker实战、DockerCompose、Harbor以及Swarm。欢迎关注收藏哦
用户4919348
2022/01/06
7360
云原生时代必须具备的核心技能之Docker高级篇(Docker网络详解)
harbor修改了docker默认网卡失效原因
修改了docker的默认网段,但是harbor启动时候又会出现docker默认的网段,故现找下原因
SY小站
2020/06/15
1.5K0
x0vncserver 共享桌面
有些场景下,需要进行桌面演示,在 windows 里有很多软件可以满足此类需求,那在 Linux 里该如何实现呢
franket
2021/08/12
3.1K0
linux命令总结之ip命令
Linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者。使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务。ifconfig是net-tools中已被废弃使用的一个命令,许多年前就已经没有维护了。iproute2套件里提供了许多增强功能的命令,ip命令即是其中之一。
西湖醋鱼
2020/12/30
3.5K0
linux命令总结之ip命令
如何使用Calico实现跨主机Docker网络通信
户外依然大雨滂沱,只是这回彷彿不仅命运一人独自哭泣,不晓得由来,窗外的雨水似乎渗上我心头,有些寒冻,有些缩麻,还有些苦涩。城市万家灯火,橘黄街灯与家户里的温暖流洩,我总觉得这时候的我,最脆弱。-----《Unser Leben Unser Traum》
山河已无恙
2023/03/02
1.1K0
关于docker环境运行zabbix时,你可能不知道的事
关于docker环境运行zabbix时,可以快速的部署一套zabbix环境,不管是学习docker还是学习zabbix,都是可以作为一个实际项目来进行测试和练习,但是如果对docker的网络模式不熟悉,可能会遇到一些坑,本文就一些你可能不知道的事进行了测试,与试水,希望能给与大家帮助
用户6641876
2020/02/19
3.9K0
构建 chroot 监狱
这样可以有效限制用户的权力范围,增加系统安全,也可以利用这个特性创建一个隔离环境屏蔽掉大环境的影响,进行隔离开发
franket
2021/08/12
1.1K0
Docker 网络
Docker 服务启动时会首先在主机上自动创建一个 docker0 的虚拟网桥,网桥可以理解为一个软件交换机,负责挂载其上的接口之间进行包转发。
张哥编程
2024/12/07
1170
Docker 网络
当你安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host
Java_慈祥
2024/08/06
1910
Docker 网络
ETL CSV to Elasticsearch
当有大量数据要从 CSV 导入到 Elasticsearch 中时一般有两种方式来完成
franket
2021/08/11
2.5K0
相关推荐
Write xlsx with Openpyxl
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验