目录
一、概述
二、playbook 核心元素
三、playbook 语法(yaml)
1)YAML 介绍
1、YAML 格式如下
2、playbooks yaml配置文件解释
3、示例
2)variables 变量
1、facts:可以直接调用
2、用户自定义变量
3、通过roles传递变量
4、 Host Inventory
3)流程控制
1、用when 来表示的条件判断
2、标签(只执行配置文件中的一个任务)
3、循环 with_items
4、循环嵌套(字典)
4)模板 templates
1、定义模板" >1、定义模板
2、定义yaml编排" >2、定义yaml编排
5)handlers(触发事件)
6)roles
1、roles介绍与优势
2、目录结构
3、实战操作
首页 运维 安全 Ansible Playbook 讲解与实战操作

Ansible Playbook 讲解与实战操作

Jun 09, 2023 pm 08:58 PM
列表

一、概述

  • playbookad-hoc相比,是一种完全不同的运用ansible的方式,类似与saltstack的state状态文件。ad-hoc无法持久使用,playbook可以持久使用。
  • playbook是由一个或多个play组成的列表,play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。
  • 从根本上来讲,所谓的task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可以让它们联合起来按事先编排的机制完成某一任务。

参考文档:https://ansible-tran.readthedocs.io/en/latest/docs/playbooks.html

Ansible 的基础介绍和环境部署可以参考我这篇文章:Ansible 介绍与实战操作演示


Ansible Playbook 讲解与实战操作


二、playbook 核心元素

  • Hosts执行的远程主机列表
  • Tasks任务集
  • Varniables内置变量或自定义变量在playbook中调用
  • Templates模板,即使用模板语法的文件,比如配置文件等
  • Handlers和notity结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行
  • Tags标签,指定某条任务执行,用于选择运行playbook中的部分代码。

三、playbook 语法(yaml)

  • playbook使用yaml语法格式,后缀可以是yaml,也可以是yml
  • YAML( /ˈjæməl/ )参考了其他多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822,Clark Evans在2001年5月在首次发表了这种语言,另外Ingy döt Net与OrenBen-Kiki也是这语言的共同设计者。
  • YAML格式是类似JSON的文件格式。YAML用于文件的配置编写,JSON多用于开发设计。

1)YAML 介绍

1、YAML 格式如下

  • 文件的第一行应该以“---”(三个连字符)开始,表明YAML文件的开始。
  • 在同一行中,#之后的内容表示注释,类似于shell,python和ruby。
  • YAML中的列表元素以“-”开头并且跟着一个空格。后面为元素内容。
  • 同一个列表之中的元素应该保持相同的缩进,否则会被当做错误处理。
  • play中hosts、variables、roles、tasks等对象的表示方法都是以键值中间以“:”分隔表示,并且“:”之后要加一个空格。
2、playbooks yaml配置文件解释
Hosts:运行指定任务的目标主机
remoute_user:在远程主机上执行任务的用户;
sudo_user:
tasks:任务列表
 
tasks的具体格式:
 
tasks:
- name: TASK_NAME
module: arguments
notify: HANDLER_NAME
handlers:
- name: HANDLER_NAME
module: arguments
 
##模块,模块参数:
格式如下:
(1)action: module arguments
 (2) module: arguments
注意:shell和command模块后直接加命令,而不是key=value类的参数列表
 
 
handlers:任务,在特定条件下触发;接受到其他任务的通知时被触发;
登录后复制

3、示例

---
- hosts: web
remote_user: root
tasks:
- name: install nginx##安装模块,需要在被控主机里加上nginx的源
yum: name=nginx state=present
- name: copy nginx.conf##复制nginx的配置文件过去,需要在本机的/tmp目录下编辑nginx.conf
copy: src=/tmp/nginx.conf dest=/etc/nginx/nginx.conf backup=yes
notify: reload#当nginx.conf发生改变时,通知给相应的handlers
tags: reloadnginx#打标签
- name: start nginx service#服务启动模块
service: name=nginx state=started
tags: startnginx#打标签

handlers:
- name: reload
service: name=nginx state=restarted
登录后复制

2)variables 变量

variables变量有四种定义方法。如下:

1、facts:可以直接调用

ansible中有setup模块,这个模块就是通过facts组件来实现的,主要是节点本身的一个系统信息,bios信息,网络,硬盘等等信息。这里的variables也可以直接调用facts组件的facters我们可以使用setup模块来获取,然后直接放入我们的剧本之中调用即可。

ansible web -m setup
登录后复制

Ansible Playbook 讲解与实战操作

常用的几个参数:

ansible_all_ipv4_addresses # ipv4的所有地址
ansible_all_ipv6_addresses # ipv6的所有地址
ansible_date_time # 获取到控制节点时间
ansible_default_ipv4 # 默认的ipv4地址
ansible_distribution # 系统
ansible_distribution_major_version # 系统的大版本
ansible_distribution_version # 系统的版本号
ansible_domain #系统所在的域
ansible_env #系统的环境变量
ansible_hostname #系统的主机名
ansible_fqdn #系统的全名
ansible_machine #系统的架构
ansible_memory_mb #系统的内存信息
ansible_os_family # 系统的家族
ansible_pkg_mgr # 系统的包管理工具
ansible_processor_cores #系统的cpu的核数(每颗)
ansible_processor_count #系统cpu的颗数
ansible_processor_vcpus #系统cpu的总个数=cpu的颗数*CPU的核数
ansible_python # 系统上的python
登录后复制

搜索

ansible web -m setup -a 'filter=*processor*'
登录后复制

Ansible Playbook 讲解与实战操作

2、用户自定义变量

自定义变量有两种方式

  • 通过命令行传入
ansible-playbook命令行中的 -e VARS,--extra-vars VARS,这样就可以直接把自定义的变量传入
登录后复制

使用playbook定义变量,实例如下:

---
- hosts: web
remote_user: root
tasks:

- name: install {{ rpmname }}
yum: name={{ rpmname }} state=present
- name: copy {{ rpmname }}.conf
copy: src=/tmp/{{ rpmname }}.conf dest=/etc/{{ rpmname }}/{{ rpmname }}.conf backup=yes
notify: reload
tags: reload{{ rpmname }}
- name: start {{ rpmname }} service
service: name={{ rpmname }} state=started
tags: start{{ rpmname }}
 
handlers:
- name: reload
service: name={{ rpmname }} state=restarted
登录后复制

使用:

ansible-playbook nginx.yml -e rpmname=keepalived
ansible-playbook nginx.yml --extra-vars rpmname=keepalived
登录后复制
  • 在playbook中定义变量
##在playbook中定义变量如下:
vars:
- var1: value1
- var2: value2
登录后复制

使用:

---
- hosts: web
remote_user: root
vars:
- rpmname: keepalived
tasks:
- name: install {{ rpmname }}
yum: name={{ rpmname }} state=present
- name: copy {{ rpmname }}.conf
copy: src=/tmp/{{ rpmname }}.conf dest=/etc/{{ rpmname }}/{{ rpmname }}.conf backup=yes
notify: reload
tags: reload{{ rpmname }}
- name: start {{ rpmname }} service
service: name={{ rpmname }} state=started
tags: start{{ rpmname }}
 
handlers:
- name: reload
service: name={{ rpmname }} state=restarted
登录后复制

3、通过roles传递变量

下面介绍roles会使用roles传递变量,小伙伴可以翻到下面看详解讲解。

4、 Host Inventory

可以在主机清单中定义,方法如下:

#向不同的主机传递不同的变量
IP/HOSTNAME varaiable=value var2=value2
 
#向组中的主机传递相同的变量
[groupname:vars]
variable=value
登录后复制

3)流程控制

1、用when 来表示的条件判断

- hosts: web
remote_user: root#代表用root用户执行,默认是root,可以省略
tasks:
- name: createfile
copy: content="test3" dest=/opt/p1.yml
when: a=='3'
- name: createfile
copy: content="test4" dest=/opt/p1.yml
when: a=='4'
登录后复制

如果a"3",就将“test3”,写入到web组下被管控机的/opt/p1.yml中,
如果a"4",就将“test4”,写入到web组下被管控机的/opt/p1.yml中。

执行

# 语法校验
ansible-playbook--syntax-check p1.yml

#执行
ansible-playbook -e 'a="3"' p1.yml
登录后复制

2、标签(只执行配置文件中的一个任务)

- hosts: web
tasks:
- name: installnginx
yum: name=nginx
- name: copyfile
copy: src=/etc/nginx/nginx.conf dest=/etc/nginx/nginx.conf
tags: copyfile
- name: start
service: name=nginx static=restarted
登录后复制

执行

# 语法校验
ansible-playbook--syntax-check p2.yml

#执行
ansible-playbook -t copyfile p2.yml 
登录后复制

3、循环 with_items

创建三个用户

- hosts: web
tasks:
- name: createruser
user: name={{ item }}
with_items:
- shy1
- shy2
- shy3
- name: creategroup
group: name={{ item }}
with_items:
- group1
- group2
- group3 
登录后复制

执行

#语法校验
ansible-playbook--syntax-check p3.yml

#执行
ansible-playbook p3.yml 
登录后复制

4、循环嵌套(字典)

用户shy1的属组是group1,用户shy2的属组是group2,用户shy3的属组是group3

- hosts: web
tasks:
- name: creategroup
group: name={{item}}
with_items:
- group3
- group4
- group5
- name: createuser
user: name={{item.user}} group={{item.group}}
with_items:
- {'user': shy3,'group': group3}
- {'user': shy4,'group': group4}
- {'user': shy5,'group': group5}
登录后复制

执行

#语法校验
ansible-playbook--syntax-check p4.yml

#执行
ansible-playbook p4.yml 
登录后复制

4)模板 templates

  • 模板是一个文本文件,嵌套有脚本(使用模板编程语言编写)
  • Jinja2是python的一种模板语言,以Django的模板语言为原本

该模板支持:

字符串:使用单引号或双引号;
数字:整数,浮点数;
列表:[item1, item2, ...]
元组:(item1, item2, ...)
字典:{key1:value1, key2:value2, ...}
布尔型:true/false
算术运算:
+, -, *, /, //, %, **
比较操作:
==, !=, >, >=, <, <=
逻辑运算:
and, or, not
登录后复制
  • 通常模板都是通过引用变量来运用的

【示例】

1、定义模板

usernginx; #设置nginx服务的系统使用用户
worker_processes{{ ansible_processor_vcpus }}; #工作进程数

error_log/var/log/nginx/error.log warn; #nginx的错误日志
pid/var/run/nginx.pid; #nginx启动时候的pid

events {
worker_connections1024; #每个进程允许的最大连接数
}

http { #http请求配置,一个http可以包含多个server

#定义 Content-Type
include /etc/nginx/mime.types;
default_typeapplication/octet-stream;

#日志格式 此处main与access_log中的main对应
#$remote_addr:客户端地址
#$remote_user:http客户端请求nginx认证的用户名,默认不开启认证模块,不会记录
#$timelocal:nginx的时间
#$request:请求method + 路由 + http协议版本
#status:http reponse 状态码
#body_bytes_sent:response body的大小
#$http_referer:referer头信息参数,表示上级页面
#$http_user_agent:user-agent头信息参数,客户端信息
#$http_x_forwarded_for:x-forwarded-for头信息参数
log_formatmain'$http_user_agent' '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

#访问日志,后面的main表示使用log_format中的main格式记录到access.log中
access_log/var/log/nginx/access.logmain;

#nginx的一大优势,高效率文件传输
sendfileon;
#tcp_nopush on;

#客户端与服务端的超时时间,单位秒
keepalive_timeout65;

#gzipon;
server { #http服务,一个server可以配置多个location
listen {{ nginxport }}; #服务监听端口
server_namelocalhost; #主机名、域名

#charset koi8-r;
#access_log/var/log/nginx/host.access.logmain;

location / {
root /usr/share/nginx/html; #页面存放目录
indexindex.html index.htm; #默认页面
}

#error_page404/404.html;

# 将500 502 503 504的错误页面重定向到 /50x.html
error_page 500 502 503 504/50x.html;
location = /50x.html { #匹配error_page指定的页面路径
root /usr/share/nginx/html; #页面存放的目录
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
#root html;
#fastcgi_pass 127.0.0.1:9000;
#fastcgi_indexindex.php;
#fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name;
#includefastcgi_params;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
#denyall;
#}
}
include /etc/nginx/conf.d/*.conf;
}
登录后复制
登录后复制

2、定义yaml编排

---
- hosts: web
remote_user: root
vars:
- rpmname: nginx
- nginxport: 8088
tasks:
- name: install {{ rpmname }}
yum: name={{ rpmname }} state=present
- name: copy {{ rpmname }}.conf
copy: src=/tmp/{{ rpmname }}.conf dest=/etc/{{ rpmname }}/{{ rpmname }}.conf backup=yes
notify: reload
tags: reload{{ rpmname }}
- name: start {{ rpmname }} service
service: name={{ rpmname }} state=started
tags: start{{ rpmname }}
 
handlers:
- name: reload
service: name={{ rpmname }} state=restarted
登录后复制

使用

##使用reloadnginx标签,重新加载剧本
登录后复制

copy与template的区别

  • copy模块不替代参数,template模块替代参数
  • template的参数几乎与copy的参数完全相同

5)handlers(触发事件)

notify:触发
handlers:触发的动作
登录后复制

使用上场景:修改配置文件时

【示例】 正常情况时handlers是不会执行的

- hosts: web
tasks:
- name: installredis
yum: name=redis
- name: copyfile
template: src=redis.conf dest=/etc/redis.conf
tags: copyfile
notify: restart
- name: start
service: name=redis state=started
handlers:
- name: restart
service: name=redis
登录后复制

执行

ansible-playbook -t copyfile p6.yml
登录后复制

6)roles

1、roles介绍与优势

一般情况下将roles写在/etc/ansible/roles中,也可以写在其他任意位置(写在其他位置要自己手动建立一个roles文件夹)

  • 对于以上所有方式有个缺点就是无法实现同时部署web、database、keepalived等不同服务或者不同服务器组合不同的应用就需要写多个yaml文件,很难实现灵活的调用
  • roles用于层次性,结构化地组织playbook。roles能够根据层次结果自动装载变量文件、tasks以及handlers等。
  • 要使用roles只需要在playbook中使用include指令即可。
  • 简单来讲,roles就是通过分别将变量(vars)、文件(files)、任务(tasks)、模块(modules)以及处理器(handlers)放置于单独的目录中,并且可以便捷的include它们地一种机制。
  • 角色一般用于基于主机构建服务的场景中,但是也可以用于构建守护进程等场景中。4

2、目录结构

创建目录

mkdir -pv ./{nginx,mysql,httpd}/{files,templates,vars,tasks,handlers,meta,default}
登录后复制
登录后复制

Ansible Playbook 讲解与实战操作

  • roles/
  • mysql/:mysql服务的yml文件
  • httpd/:apached服务的yml文件
  • nginx/:nginx服务的yml文件
  • files/:存储由copy或者script等模块调用的文件或者脚本;
  • tasks/:此目录中至少应该有一个名为main.yml的文件,用于定义各个task;其他文件需要由main.yml进行包含调用;
  • handlers/:此目录中至少应该有一个名为main.yml的文件,用于定义各个handler;其他文件需要由main.yml进行包含调用;
  • vars/:此目录至少应该有一个名为main,yml的文件,用于定义各个variable;其他的文件需要由main.yml进行包含调用;
  • templates/:存储由templates模块调用的模板文件;
  • meta/:此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定以及依赖关系,其他文件需要由main.yml进行包含调用;
  • default/:此目录至少应该有一个名为main.yml的文件,用于设定默认变量;

3、实战操作

【1】创建目录

mkdir -pv ./{nginx,mysql,httpd}/{files,templates,vars,tasks,handlers,meta,default}
登录后复制
登录后复制

【2】定义配置文件

先下载nginx rpm部署包

# 下载地址:http://nginx.org/packages/centos/7/x86_64/RPMS/
 wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.18.0-1.el7.ngx.x86_64.rpm -O nginx/files/nginx-1.18.0-1.el7.ngx.x86_64.rpm
登录后复制
  • nginx/tasks/main.yml
- name: cp
copy: src=nginx-1.18.0-1.el7.ngx.x86_64.rpm dest=/tmp/nginx-1.18.0-1.el7.ngx.x86_64.rpm
- name: install
yum: name=/tmp/nginx-1.18.0-1.el7.ngx.x86_64.rpm state=latest
- name: conf
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
tags: nginxconf
notify: new conf to reload
- name: start service
service: name=nginx state=started enabled=true
登录后复制
  • nginx/templates/nginx.conf.j2
usernginx; #设置nginx服务的系统使用用户
worker_processes{{ ansible_processor_vcpus }}; #工作进程数

error_log/var/log/nginx/error.log warn; #nginx的错误日志
pid/var/run/nginx.pid; #nginx启动时候的pid

events {
worker_connections1024; #每个进程允许的最大连接数
}

http { #http请求配置,一个http可以包含多个server

#定义 Content-Type
include /etc/nginx/mime.types;
default_typeapplication/octet-stream;

#日志格式 此处main与access_log中的main对应
#$remote_addr:客户端地址
#$remote_user:http客户端请求nginx认证的用户名,默认不开启认证模块,不会记录
#$timelocal:nginx的时间
#$request:请求method + 路由 + http协议版本
#status:http reponse 状态码
#body_bytes_sent:response body的大小
#$http_referer:referer头信息参数,表示上级页面
#$http_user_agent:user-agent头信息参数,客户端信息
#$http_x_forwarded_for:x-forwarded-for头信息参数
log_formatmain'$http_user_agent' '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

#访问日志,后面的main表示使用log_format中的main格式记录到access.log中
access_log/var/log/nginx/access.logmain;

#nginx的一大优势,高效率文件传输
sendfileon;
#tcp_nopush on;

#客户端与服务端的超时时间,单位秒
keepalive_timeout65;

#gzipon;
server { #http服务,一个server可以配置多个location
listen {{ nginxport }}; #服务监听端口
server_namelocalhost; #主机名、域名

#charset koi8-r;
#access_log/var/log/nginx/host.access.logmain;

location / {
root /usr/share/nginx/html; #页面存放目录
indexindex.html index.htm; #默认页面
}

#error_page404/404.html;

# 将500 502 503 504的错误页面重定向到 /50x.html
error_page 500 502 503 504/50x.html;
location = /50x.html { #匹配error_page指定的页面路径
root /usr/share/nginx/html; #页面存放的目录
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
#root html;
#fastcgi_pass 127.0.0.1:9000;
#fastcgi_indexindex.php;
#fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name;
#includefastcgi_params;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
#denyall;
#}
}
include /etc/nginx/conf.d/*.conf;
}
登录后复制
登录后复制
  • nginx/vars/main.yml
nginxport: 9999
登录后复制
  • nginx/handlers/main.yml
- name: new conf to reload
service: name=nginx state=restarted
登录后复制
  • 定义剧本文件(roles.yml
- hosts: web
remote_user: root
roles:
- nginx
登录后复制

最后的目录结构如下:

Ansible Playbook 讲解与实战操作

执行

ansible-playbook roles.yml
登录后复制

Ansible Playbook 讲解与实战操作


以上是Ansible Playbook 讲解与实战操作的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何使用Python的count()函数计算列表中某个元素的数量 如何使用Python的count()函数计算列表中某个元素的数量 Nov 18, 2023 pm 02:53 PM

如何使用Python的count()函数计算列表中某个元素的数量,需要具体代码示例Python作为一种强大且易学的编程语言,提供了许多内置函数来处理不同的数据结构。其中之一就是count()函数,它可以用来计算列表中某个元素的数量。在本文中,我们将详细介绍如何使用count()函数,并提供具体的代码示例。count()函数是Python的内置函数,用于计算某

如何使用Python从列表中删除方括号 如何使用Python从列表中删除方括号 Sep 05, 2023 pm 07:05 PM

Python是一款非常有用的软件,可以根据需要用于许多不同的目的。Python可以用于Web开发、数据科学、机器学习等许多其他需要自动化处理的领域。它具有许多不同的功能,可以帮助我们执行这些任务。Python列表是Python的一个非常有用的功能之一。顾名思义,列表包含您希望存储的所有数据。它基本上是一组不同类型的信息。删除方括号的不同方法许多时候,用户会遇到列表项显示在方括号中的情况。在本文中,我们将详细介绍如何去掉这些括号,以便更好地查看您的列表。字符串和替换函数删除括号的最简单方法之一是在

创建杂货清单的方法:使用 iPhone 的'提醒事项”App 创建杂货清单的方法:使用 iPhone 的'提醒事项”App Dec 01, 2023 pm 03:37 PM

在iOS17中,Apple在提醒应用程序中添加了一个方便的小列表功能,以便在您外出购买杂货时为您提供帮助。继续阅读以了解如何使用它并缩短您的商店之旅。当您使用新的“杂货”列表类型(在美国以外名为“购物”)创建列表时,您可以输入各种食品和杂物,并按类别自动组织它们。该组织使您在杂货店或外出购物时更容易找到您需要的东西。提醒中可用的类别类型包括农产品、面包和谷物、冷冻食品、零食和糖果、肉类、乳制品、鸡蛋和奶酪、烘焙食品、烘焙食品、家居用品、个人护理和健康以及葡萄酒、啤酒和烈酒。以下是在iOS17中创

制作 iPhone 上 iOS 17 提醒应用程序中的购物清单的方法 制作 iPhone 上 iOS 17 提醒应用程序中的购物清单的方法 Sep 21, 2023 pm 06:41 PM

如何在iOS17中的iPhone上制作GroceryList在“提醒事项”应用中创建GroceryList非常简单。你只需添加一个列表,然后用你的项目填充它。该应用程序会自动将您的商品分类,您甚至可以与您的伴侣或扁平伙伴合作,列出您需要从商店购买的东西。以下是执行此操作的完整步骤:步骤1:打开iCloud提醒事项听起来很奇怪,苹果表示您需要启用来自iCloud的提醒才能在iOS17上创建GroceryList。以下是它的步骤:前往iPhone上的“设置”应用,然后点击[您的姓名]。接下来,选择i

Del和remove()在Python中的列表上有什么区别? Del和remove()在Python中的列表上有什么区别? Sep 12, 2023 pm 04:25 PM

在讨论差异之前,让我们先了解一下Python列表中的Del和Remove()是什么。Python列表中的Del关键字Python中的del关键字用于从List中删除一个或多个元素。我们还可以删除所有元素,即删除整个列表。示例使用del关键字从Python列表中删除元素#CreateaListmyList=["Toyota","Benz","Audi","Bentley"]print("List="

无法显示win7无线网络列表 无法显示win7无线网络列表 Dec 22, 2023 am 08:07 AM

为了方便很多人移动办公,很多笔记本都带有无线网的功能,但有些人的电脑上无法显示WiFi列表,现在就给大家带来win7系统下遇到这种问题的处理方法,一起来看一下吧。win7无线网络列表显示不出来1、右键你电脑右下角的网络图标,选择“打开网络和共享中心”,打开后再点击左边的“更改适配器设置”2、打开后鼠标右键选择无线网络适配器,选择“诊断”3、等待诊断,如果系统诊断出问题那就修复它。4、修复完成之后,就可以看到WiFi列表了。

使用Python根据列表创建多个目录 使用Python根据列表创建多个目录 Sep 08, 2023 am 08:21 AM

Python凭借其简单性和多功能性,已成为各种应用程序中最流行的编程语言之一。无论您是经验丰富的开发人员还是刚刚开始编码之旅,Python都提供了广泛的功能和库,使复杂的任务变得易于管理。在本文中,我们将探讨一个实际场景,Python可以通过自动执行基于列表创建多个目录的过程来帮助我们。通过利用Python内置模块和技术的强大功能,我们可以有效地处理此任务,而无需手动干预。在本教程中,我们将深入研究创建多个目录的问题,并为您提供使用Python解决该问题的不同方法。在本文结束时,我们的目标是为您

我们可以在Java列表中插入空值吗? 我们可以在Java列表中插入空值吗? Aug 20, 2023 pm 07:01 PM

SolutionYes,Wecaninsertnullvaluestoalisteasilyusingitsadd()method.IncaseofListimplementationdoesnotsupportnullthenitwillthrowNullPointerException.Syntaxbooleanadd(Ee)将指定的元素追加到此列表的末尾。类型参数E −元素的运行时类型。参数e −要追加到此列表的元

See all articles