当前位置: 首页 > news >正文

Ansible定义各类变量,引用变量方式介绍及注册变量和vars_prompt的用法示例

目录

一.Ansible定义变量

1.用途

2.定义规则

3.变量优先级

二.命令行定义变量

三.定义主机和主机组变量

1.主机变量

(1)内置主机变量

(2)简单示例

2.主机组变量

四.定义playbook变量

1.通过vars表示定义变量,通过' "{{变量名}}" '来引用变量

2.通过vars_file指定变量文件

五.定义host_vars和group_vars目录变量

1.主机组变量使用group_vars

2.主机变量只用host_vars

3.以主机变量简单为例演示

六.注册变量

七.vars_prompt交互变量

1.参数解析

2.简单交互案例

3.创建用户和密码示例

(1)encrypt

(2)confirm

八.引用变量

1.引用简单定义的变量

2.引用较为复杂定义的变量


 

一.Ansible定义变量

1.用途

ansible的变量主要用于存储在整个项目中重复使用的一些值,来提高创建任务和维护节点的效率

2.定义规则

变量名由字母、数字、下划线组成,由字母开头

内置关键字不能作为变量名

3.变量优先级

全局范围内命令行设置的变量>playbook及其相关配置的变量>主机和组清单的变量>ansible.cfg配置文件设置的变量

二.命令行定义变量

如上文所述,命令行使用"-e '变量名=值' "设置的变量优先级最高,下面举例演示命令行变量覆盖playbook中的变量

[root@main ~]# cat abc.yaml 
---
- hosts: webserversvars:myservice: httpd   #原本playbook内容为停掉httpdtasks:- name: test1service:name: "{{ myservice }}"state: stopped
[root@main ~]# ansible-playbook abc.yaml -e 'myservice=chronyd'
#运行时指定变量更改为关掉chronyd
[root@main ~]# ansible webservers -m shell -a 'systemctl status httpd | grep Active'
serverb | CHANGED | rc=0 >>Active: active (running) since Tue 2023-10-17 14:06:57 CST; 5h 22min ago
servera | CHANGED | rc=0 >>Active: active (running) since Tue 2023-10-17 19:25:46 CST; 3min 12s ago
[root@main ~]# ansible webservers -m shell -a 'systemctl status chronyd | grep Active'
serverb | CHANGED | rc=0 >>Active: inactive (dead) since Tue 2023-10-17 19:28:30 CST; 35s ago
servera | CHANGED | rc=0 >>Active: inactive (dead) since Tue 2023-10-17 19:28:30 CST; 35s ago
#运行结果可以看出,停掉httpd未生效,停chonyd生效,命令行给定变量优先级高于playbook给定变量优先级

三.定义主机和主机组变量

1.主机变量

(1)内置主机变量

在变量前加上"ansible_"即成为内置变量

部分内置主机关于ssh和提权的变量举例

ansible_ssh_host:指定受管节点主机真实IP地址
ansible_ssh_port:指定通过哪个端口连接受管节点
ansible_ssh_user:指定连接时使用的用户名称
ansibe_connection:指定ssh连接类型,local、ssh、paramiko
ansible_ssh_pass:ssh连接时使用的密码
ansible_ssh_executable:指定ssh指定的路径
​
ansible_become:允许特权升级,等同于ansible_sudo,ansible_su
ansible_become_user:提权到哪个用户,等同于ansible_sudo_user,ansible_su_user
ansbile_become_pass:需要密码时指定密码,等同于ansible_sudo_pass
ansible_sudo_exec:指定sudo命令路径

(2)简单示例

[student@workstation ~]$ vim user.yml
#不属于任何组的用户
192.168.2.190 ansible_ssh_user=root ansible_user_pass='redhat'
192.168.2.191 ansible_ssh_user=root ansible_user_pass='su123'

2.主机组变量

如上例,将两台受管节点相等的部分定义为一个变量

[student@workstation ~]$ vim user.yml
192.168.2.190 ansible_ssh_user=root ansible_user_pass='redhat'
192.168.2.191 ansible_ssh_user=root ansible_user_pass='su123'
#更改为
192.168.2.190  ansible_user_pass='redhat'
192.168.2.191  ansible_user_pass='su123'
[webservers:vars]
ansible_ssh_user=root

四.定义playbook变量

1.通过vars表示定义变量,通过' "{{变量名}}" '来引用变量

[root@localhost ~]# cat httpd.yaml 
---
- name: install httpd chronyhosts: webserversvars:   #声明在此处定义变量mypackages:     #变量名- httpd- chronymyhttpd: httpd mychronyd: chronydtasks:- name: install themyum:name: "{{ mypackages }}"   #使用变量state: present- name: start httpdservice:name: "{{ myhttpd }}"state: started- name: start chronydservice:name: "{{ mychronyd }}"state: started
​
[root@localhost ~]# ansible webservers -m shell -a 'systemctl status httpd | grep Active'
serverb | CHANGED | rc=0 >>Active: active (running) since Tue 2023-10-17 14:06:57 CST; 3min 45s ago
servera | CHANGED | rc=0 >>Active: active (running) since Tue 2023-10-17 14:06:57 CST; 3min 45s ago
[root@localhost ~]# ansible webservers -m shell -a 'systemctl status chronyd | grep Active'
servera | CHANGED | rc=0 >>Active: active (running) since Tue 2023-10-17 13:29:27 CST; 41min ago
serverb | CHANGED | rc=0 >>Active: active (running) since Tue 2023-10-17 13:31:57 CST; 38min ago

2.通过vars_file指定变量文件

[root@main ~]# cat myvar1.yaml   #vars文件也使用yaml格式
packages:- rpcbind- openssl[root@main ~]# cat httpd1.yaml 
---
- name: install rpcbind opensslhosts: webserverstasks:- name: install themyum:name: "{{ packages }}"   #同样这样使用变量state: presentvars_files:   #指定vars文件- myvar1.yaml   #指定你自己的vars问文件位置,这里是当前路径下的myvars1.yaml文件
​
[root@main ~]# ansible-playbook httpd1.yaml --syntax-check
​
playbook: httpd1.yaml
[root@main ~]# ansible-playbook httpd1.yaml 
​
[root@main ~]# ansible webservers -m shell -a 'yum list installed | grep rpcbind'
servera | CHANGED | rc=0 >>
rpcbind.x86_64                        0.2.0-49.el7                     @base    
serverb | CHANGED | rc=0 >>
rpcbind.x86_64                        0.2.0-49.el7                     @base    
[root@main ~]# ansible webservers -m shell -a 'yum list installed | grep openssl'
servera | CHANGED | rc=0 >>
openssl.x86_64                        1:1.0.2k-19.el7                  @anaconda
openssl-libs.x86_64                   1:1.0.2k-19.el7                  @anaconda
xmlsec1-openssl.x86_64                1.2.20-7.el7_4                   @anaconda
serverb | CHANGED | rc=0 >>
openssl.x86_64                        1:1.0.2k-19.el7                  @anaconda
openssl-libs.x86_64                   1:1.0.2k-19.el7                  @anaconda
xmlsec1-openssl.x86_64                1.2.20-7.el7_4                   @anaconda

五.定义host_vars和group_vars目录变量

1.主机组变量使用group_vars

group_vars是一个目录,这个名称固定,必须是和你的inventory文件和ansible.cfg文件位于同一级目录,其下创建的文件需要和你主机清单中的组名称一致,在这个文件中写入变量和值

2.主机变量只用host_vars

host_vars和group_vars相同,也是一个目录,名称固定,必须和inventory文件和ansible.cfg文件位于同一级目录,其下创建的文件需要和你主机清单中的主机名称一致(清单文件中写的是主机名就写=用主机名,是IP地址就用IP地址),在这个文件中写入变量和值

3.以主机变量简单为例演示

[root@main ~]# tree /root
/root
├── anaconda-ks.cfg
├── ansible.cfg
├── group_vars
│   ├── dbservers
│   └── webservers
├── host_vars
│   ├── servera
│   └── serverb
├── httpd1.yaml
├── httpd.yaml
├── myhosts
├── myhttpd.yaml
└── myvar1.yaml
​
[root@main ~]# cat host_vars/servera
aname: httpd
[root@main ~]# cat host_vars/serverb
bname: mod_ssl
​
[root@main ~]# cat myhttpd.yaml 
---
- name: stop servera httpdhosts: serveratasks:- name: stop itservice:name: "{{ aname }}"     #在剧本中就可以直接用用定义好的主机变量state: stopped
- name: install serverb mod_sslhosts: serverbtasks:- name: install ityum:name: "{{ bname }}"state: present
​
[root@main ~]# ansible-playbook myhttpd.yaml --syntax-check
​
playbook: myhttpd.yaml
[root@main ~]# ansible-playbook myhttpd.yaml
​
[root@main ~]# ansible servera -m shell -a 'systemctl status httpd | grep Active'
servera | CHANGED | rc=0 >>Active: inactive (dead)
[root@main ~]# ansible serverb -m shell -a 'yum list installed | grep mod_ssl'
serverb | CHANGED | rc=0 >>
mod_ssl.x86_64                        1:2.4.6-99.el7.centos.1          @updates 

六.注册变量

注册变量主要是使用register来捕获命令的输出,将其保存在一个临时变量中,便于进行特定操作。

如下例,将"id su"的结果注册为"su",并使用debug模块输出su的内容,并在playbook执行后的debug结果中判断出该用户是否存在

[root@main ~]# cat iduser.yaml 
---
- name: is su existhosts: webserverstasks:- name: test sushell: id suregister: suignore_errors: yes   #便于测试,忽略错误- name: echo itdebug:msg: "{{ su }}"
​
[root@main ~]# ansible-playbook iduser.yaml
​
PLAY [is su exist] ******************************************************************************************************************************
​
TASK [Gathering Facts] **************************************************************************************************************************
ok: [servera]
ok: [serverb]
​
TASK [test su] **********************************************************************************************************************************
changed: [servera]
changed: [serverb]
​
TASK [echo it] **********************************************************************************************************************************
ok: [servera] => {"msg": {"changed": true, "cmd": "id su", "delta": "0:00:00.004109", "end": "2023-10-17 19:05:47.215481", "failed": false, "rc": 0,   #为0表示存在,非0不存在"start": "2023-10-17 19:05:47.211372", "stderr": "", "stderr_lines": [], "stdout": "uid=1000(su) gid=1000(su) groups=1000(su)",    #有会输出该用户的详细信息,没有会提示不存在此用户"stdout_lines": ["uid=1000(su) gid=1000(su) groups=1000(su)"]}
}
ok: [serverb] => {"msg": {"changed": true, "cmd": "id su", "delta": "0:00:00.004695", "end": "2023-10-17 19:05:47.220915", "failed": false, "rc": 0, "start": "2023-10-17 19:05:47.216220", "stderr": "", "stderr_lines": [], "stdout": "uid=1000(su) gid=1000(su) groups=1000(su)", "stdout_lines": ["uid=1000(su) gid=1000(su) groups=1000(su)"]}
}
​
PLAY RECAP **************************************************************************************************************************************
servera                    : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
serverb                    : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

七.vars_prompt交互变量

用于交互提示用户输入值

1.参数解析

prompt表示对用户的提示信息

private表示用户在输入时是否隐藏输入的信息

default表示如果用户没有输入,则此项的默认值

2.简单交互案例

[root@main ~]# cat register.yaml 
---
- hosts: webserversvars_prompt:- name: "one"prompt: "请输入第一个值"private: no- name: "two"prompt: "请输入第二个值"#default: 'hello'private: yestasks:- name: dis one valuedebug: msg="{{one}}"- name: dis two valuedebug: msg="{{two}}"
#测试结果
[root@main ~]# ansible-playbook register.yaml
请输入第一个值: nihao
请输入第二个值:             #private为yes,此处我输入时会隐藏信息
​
PLAY [webservers] *******************************************************************************************************************************
​
TASK [Gathering Facts] **************************************************************************************************************************
ok: [servera]
ok: [serverb]
​
TASK [dis one value] ****************************************************************************************************************************
ok: [servera] => {"msg": "nihao"
}
ok: [serverb] => {"msg": "nihao"
}
​
TASK [dis two value] ****************************************************************************************************************************
ok: [servera] => {        #显示输入的信息"msg": "hello"
}
ok: [serverb] => {"msg": "hello"
}
​
PLAY RECAP **************************************************************************************************************************************
servera                    : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
serverb                    : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

3.创建用户和密码示例

(1)encrypt

可以指定在密码处可以指定使用sha512对密码进行哈希加密

(2)confirm

可以设置重复确认密码,两次密码不符合会报“* VALUES ENTERED DO NOT MATCH ”

[root@main ~]# cat register1.yaml 
---
- hosts: webserversvars_prompt:- name: "name"prompt: "enter user_name"private: no- name: "passwd"prompt: "enter user_passwd"private: yes#encrypt: "sha512_crypt"   #confirm: yes           tasks:- name: create himuser:name: "{{ name }}"password: "{{ passwd }}"
​
[root@main ~]# ansible-playbook register1.yaml
enter user_name: sulibao
enter user_passwd: 
[WARNING]: Found variable using reserved name: name
​
PLAY [webservers] *******************************************************************************************************************************
​
TASK [Gathering Facts] **************************************************************************************************************************
ok: [serverb]
ok: [servera]
​
TASK [create him] *******************************************************************************************************************************
[WARNING]: The input password appears not to have been hashed. The 'password' argument must be encrypted for this module to work properly.
changed: [serverb]
changed: [servera]
​
PLAY RECAP **************************************************************************************************************************************
servera                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
serverb                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
​
[root@main ~]# ansible webservers -a 'id sulibao'
serverb | CHANGED | rc=0 >>
uid=1001(sulibao) gid=1001(sulibao) groups=1001(sulibao)
servera | CHANGED | rc=0 >>
uid=1001(sulibao) gid=1001(sulibao) groups=1001(sulibao)
​
#未加密的密码
[root@main ~]# ansible webservers -m shell -a 'cat /etc/shadow | grep sulibao'
serverb | CHANGED | rc=0 >>
sulibao:ansible:19647:0:99999:7:::
servera | CHANGED | rc=0 >>
sulibao:ansible:19647:0:99999:7:::
#加密后
[root@main ~]# ansible webservers -m shell -a 'cat /etc/shadow | grep li'
serverb | CHANGED | rc=0 >>
sulibao:ansible:19647:0:99999:7:::
li:$6$U0qiY4DnzK8AWcBe$rIFmtpCr.1qU3sxtv90U2bRaZbxgqj1PK9UV4wp6W8zWXigHTfcfuFjJ0AvCZMb0Xe75juLlarm94xNZUnoCX.:19647:0:99999:7:::
servera | CHANGED | rc=0 >>
sulibao:ansible:19647:0:99999:7:::
li:$6$U0qiY4DnzK8AWcBe$rIFmtpCr.1qU3sxtv90U2bRaZbxgqj1PK9UV4wp6W8zWXigHTfcfuFjJ0AvCZMb0Xe75juLlarm94xNZUnoCX.:19647:0:99999:7:::

八.引用变量

1.引用简单定义的变量

[root@main ~]# cat myvar1.yaml 
packages:               #类似于定义了一个列表形式的变量- rpcbind- openssl
[root@main ~]# cat httpd1.yaml 
---
- name: install rpcbind opensslhosts: webserverstasks:- name: install themyum:name: "{{ packages }}"    #就直接通过“ "{{变量名}}" ”来引用state: presentvars_files:- myvar1.yaml

2.引用较为复杂定义的变量

[root@main ~]# cat myvar2.yaml 
su:           #定义了一个层层嵌套的变量name:tname: sulibaofname: libaosu
[root@main ~]# cat echo.yaml 
---
- hosts: webserverstasks:- name: echo somethingdebug:msg: "{{ su.name.fname }}"          #需要使用嵌套定义的变量时,需要使用"."或者"[]"来表示一层一层地引用#msg: "{{ su['name']['fname'] }}"vars_files:- myvar2.yaml
#运行查看结果
[root@main ~]# ansible-playbook echo.yaml 
​
PLAY [webservers] *******************************************************************************************************************************
​
TASK [Gathering Facts] **************************************************************************************************************************
ok: [serverb]
ok: [servera]
​
TASK [echo something] ***************************************************************************************************************************
ok: [servera] => {"msg": "libaosu"
}
ok: [serverb] => {"msg": "libaosu"
}
​
PLAY RECAP **************************************************************************************************************************************
servera                    : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
serverb                    : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
​

 

相关文章:

Ansible定义各类变量,引用变量方式介绍及注册变量和vars_prompt的用法示例

目录 一.Ansible定义变量 1.用途 2.定义规则 3.变量优先级 二.命令行定义变量 三.定义主机和主机组变量 1.主机变量 (1)内置主机变量 (2)简单示例 2.主机组变量 四.定义playbook变量 1.通过vars表示定义变量&#xff…...

各类证件的版面信息收集

香港身份证的版面分析: 证件页面: 相关的版面信息: 该页面包含香港身份证的信息,可以用于版面分析; 信息来源:香港不同证件说明大汇总|回乡证|居民身份证|护照|永居_手机网易网 台湾通行证号码&#xf…...

vueday01——ref响应式

特性&#xff1a;持续监控某个响应式变量的属性名变化&#xff0c;可以使用shallowRef来取消这一特性&#xff0c;只监控对象整体的变化 ref测试代码&#xff1a; <template><div :id"idValue" ref"myDiv">打印obj{{ obj }}</div><…...

SpringBoot集成Redisson操作Redis

目录 一、前言二、基础集成配置&#xff08;redis单节点&#xff09;2.1、POM2.2、添加配置文件2.3、添加启动类2.4、添加测试类测试redisson操作redis 一、前言 Redisson 是一个在 Redis 的基础上实现的 Java 驻内存数据网格&#xff0c;Redisson相比较与Jedis和Lettuce来说最…...

整数反转

题目&#xff1a; 给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] &#xff0c;就返回 0。 假设环境不允许存储 64 位整数&#xff08;有符号或无符号&#xff09;。 示例 …...

【ELK使用指南 2】常用的 Logstash filter 插件详解(附应用实例)

Logstash filter 一、logstash filter过滤插件的常用模块简介二、grok 正则捕获插件2.1 grok插件的作用2.2 内置正则表达式2.3 自定义正则表达式 三、mutate 数据修改插件3.1 mutate插件的作用3.2 常用的配置选项3.3 mutate插件应用实例 四、multiline 多行合并插件4.1 multili…...

(转)STR 内核做了什么

参考这篇文章&#xff1a; Linux电源管理(6)_Generic PM之Suspend功能 写的很清晰...

fastapi项目结构以及多进程部署

环境&#xff1a; python3.10.x Linux/centos 背景&#xff1a; 最近在用FastApi开发数据统计&#xff0c;并将统计数据返回给前端展示的数据系统。 数据库&#xff1a; mongodb&#xff0c; python包为mongoEngine 项目结构 main.py api middleware router-- __init__.py-- …...

【LeetCode】 412. Fizz Buzz

题目链接 文章目录 Python3 【O(n) O(1)】C.emplace_back() 【C 11 之后】 Python3 【O(n) O(1)】 初始版本 class Solution:def fizzBuzz(self, n: int) -> List[str]:ans []for i in range(1, n1):if i % 5 0 and i % 3 0:ans.append("FizzBuzz")elif i % …...

vector+算法sort与list+sort的效率比较,容易写错的地方原因探析

我写的代码&#xff1a; #include <iostream> using namespace std; #include <vector> #include <list> #include <algorithm> int main() {const int N 10000000;vector<int> v;list<int> l;for (int i 0; i < N; i){v.push_back(…...

iOS——Manager封装网络请求

在之前的项目里&#xff0c;我们都是把网络请求写在viewController的viewDidLoad&#xff0c;而实际中使用的时候并不能这么简单&#xff0c;对于不同的需要&#xff0c;我们需要有不同的网络请求。所以我们可以用单例模式创建一个全局的Manager类&#xff0c;用实例Manager来执…...

【javascript】内部引入与外部引入javascript

创建a.html 内部引入&#xff1a; 外部引入&#xff1a; 创建a.js 注意&#xff1a; 我这里的a.js和a.html是放在同一个目录下&#xff0c;如果a.js放在js的目录下&#xff0c;a.html 调用a.js的时候 <script src"/js/a.js"></script>...

掌握JavaScript的练习之道:十个手写函数让你信手拈来!

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…...

买卖股票的最佳时机 II[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个整数数组prices&#xff0c;其中prices[i]表示某支股票第i天的价格。在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候最多只能持有一股股票。你也可以先购买&#xff0c;然后在同一天出售。返回你能获得…...

前端开发调试技巧:如何在Component下选中当前插件并且查看当前插件信息

在react开发项目中&#xff0c;在Component下选中组件&#xff0c;然后在控制台输$r 按回车键即可输出该组件信息。例如 $r.props输出该组件的props参数。例子详情见如下截图...

你是否还迷茫要不要学习Linux?

近几年Linux这个词好像很流行&#xff0c;无论是现实工作中&#xff0c;还是在网络信息中均可以听到或者看到有关Linux相关的内容&#xff0c;可以说Linux无处不在。说到这&#xff0c;有人可能会问了&#xff0c;我对Linux比较感兴趣&#xff0c;但是没有接触过Linux&#xff…...

leetcode(1)链表

# 1. 定义一个链表节点 class ListNode:def __init__(self, val0, next_nodeNone):self.val valself.next_node next_node# 2. 定义一个 node头节点 class LinkedList:def __init__(self):self.head None# 3.链表查找元素 get(index)&#xff1a; def get_node(self, index)…...

spring boot Rabbit高级教程

消息可靠性 生产者重试机制 首先第一种情况&#xff0c;就是生产者发送消息时&#xff0c;出现了网络故障&#xff0c;导致与MQ的连接中断。 为了解决这个问题&#xff0c;SpringAMQP提供的消息发送时的重试机制。即&#xff1a;当RabbitTemplate与MQ连接超时后&#xff0c;…...

FTP的魅力:构建高效的文件传输基础

1 ftp介绍 1.1 ftp服务器安装 dnf install vsftpd-3.0.3-31.el8.x86_64 -y # 安装ftp服务 systemctl enable --now vsftpd # 启动ftp服务 systemctl stop --now firewalld.service # 关闭防火墙&#xff0c;允许客户端访问anonymous_enableYES #启动匿名用户访问功能1.2 客户…...

70、window11+visual studio2019+共享内存进行数据传输

基本思想:服务端和客户端 写共享内存 #include <windows.h> #include <iostream> using namespace std;HANDLE g_EventRead; // 读信号灯 HANDLE g_EventWrite; // 写信号灯 // 定义共享数据class Writer { public:Writer(const int buf_size, const wchar_t…...

SSTI模板注入(flask) 学习总结

文章目录 Flask-jinja2 SSTI 一般利用姿势SSTI 中常用的魔术方法内建函数 利用 SSTI 读取文件Python 2Python 3 利用 SSTI 执行命令寻找内建函数 eval 执行命令寻找 os 模块执行命令寻找 popen 函数执行命令寻找 importlib 类执行命令寻找 linecache 函数执行命令寻找 subproce…...

最近的工作和生活

大家好&#xff0c;我是记得诚。 聊一聊最近的工作和生活。 不知不觉在管理岗位&#xff0c;快干一年了。技术管理还是比较纯粹&#xff0c;主要还是以解决问题为主&#xff0c;对自己的考验也更大了&#xff0c;要关注更广的技术&#xff0c;也要专注更深的技术细节。 技术…...

第六节:Word中对象的层次结构

《VBA之Word应用》&#xff08;10178982&#xff09;&#xff0c;是我推出第八套教程&#xff0c;教程是专门讲解VBA在Word中的应用&#xff0c;围绕“面向对象编程”讲解&#xff0c;首先让大家认识Word中VBA的对象&#xff0c;以及对象的属性、方法&#xff0c;然后通过实例让…...

ARJ_DenseNet BMR模型训练

废话不多数&#xff0c;模型训练代码 densenet_arj_BMR.py &#xff1a; import timefrom tensorflow.keras.applications.xception import Xception from tensorflow.keras.applications.densenet import DenseNet169 from tensorflow.keras.preprocessing.image import Im…...

React之Hook

一、是什么 Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性 至于为什么引入hook&#xff0c;官方给出的动机是解决长时间使用和维护react过程中常遇到的问题&#xff0c;例如&#xff1a; 难以重用和共享组件中的与状态…...

OSG嵌入QT的简明总结2

正文 我之前在这篇博文《OSG嵌入QT的简明总结》中论述了OSG在QT中显示的可视化问题。其中提到官方提供的osgQt项目&#xff08;地址&#xff1a;https://github.com/openscenegraph/osgQt &#xff09;很久前已经更新了。但是我一直没有时间同步更新&#xff0c;最近重新尝试了…...

日常中msvcp71.dll丢失怎样修复?分享5个修复方法

在 Windows 系统中&#xff0c;msvcp71.dll 是一个非常重要的动态链接库文件&#xff0c;它承载了许多应用程序和游戏的运行。如果您的系统中丢失了这个文件&#xff0c;那么您可能会遇到无法打开程序、程序崩溃或出现错误提示等问题。本文将介绍 5 个快速修复 msvcp71.dll 丢失…...

【腾讯云TDSQL-C Serverless 产品体验】使用 Python向TDSQL-C添加读取数据实现词云图

关于TDSQL-C Serverless介绍 TDSQL-C 是腾讯云自主研发的新一代云原生关系型数据库。 它融合了传统数据库、云计算和新硬件技术的优势,100%兼容 MySQL,为用户提供具有极致弹性、高性能、高可用性、高可靠性和安全性的数据库服务。 TDSQL-C 实现了超过百万每秒的高吞吐量,支持…...

服务器感染了.360、.halo勒索病毒,如何确保数据文件完整恢复?

导言&#xff1a; 数据的安全性至关重要&#xff0c;但威胁不断进化&#xff0c;.360、.halo勒索病毒是其中的令人担忧的勒索软件。本文91数据恢复将深入介绍.360、.halo勒索病毒&#xff0c;包括其威胁本质、数据恢复方法和如何采取预防措施来保护您的数据。 如果受感染的数据…...

BAT028:批量将文件修改日期后缀更新为最新修改日期

引言&#xff1a;编写批处理程序&#xff0c;实现批量将文件修改日期后缀更新为最新修改日期。 一、新建Windows批处理文件 参考博客&#xff1a; CSDNhttps://mp.csdn.net/mp_blog/creation/editor/132137544 二、写入批处理代码 1.右键新建的批处理文件&#xff0c;点击【…...