20 Shell Script输入与输出
标出输入、标准输出、错误输出
一、程序的基本三个IO流
一)文件描述符
任何程序在Linux系统中都有3个基本的文件描述符
比如:
cd/proc/$$/fd
进入当前shell程序对于内核在文件系统的映射目录中:
[root@localhost ~]# cd /proc/$$/fd
[root@localhost fd]# ll
total 0
lrwx------. 1 root root 64 Oct 14 07:22 0 -> /dev/pts/0
lrwx------. 1 root root 64 Oct 14 07:22 1 -> /dev/pts/0
lrwx------. 1 root root 64 Oct 14 07:22 2 -> /dev/pts/0
lrwx------. 1 root root 64 Oct 14 08:56 255 -> /dev/pts/0
文件描述符的意义:
0:标准输入(stdin):0代表:/dev/stdin文件的IO
1:标准输出(stdout):1代表:/dev/stdout文件的IO
2:错误输出(stderr):2代表:/dev/stderr文件的IO
程序已经写死,linux为我们准备了这些文件描述符,以及一些能够重定向这些文件描述符的操作方法,我们可以修改程序的默认输入/输出位置
二)重定向
重定向不是命令,是bash对关键字识别后应用文件描述符指向的操作
输出重定向
输入重定向来自文件
输入重定向来自字符串
基于文件描述符操作的重定向
二、输出重定向
重定向不是命令,是bash对关键字识别后应用文件描述符指向的操作
格式:
command [1-n] > file或文件操作符或设备
上面命令意思是:将一条命令执行结果(标准输出,或者错误输出,本来都要打印到屏幕上面的)重定向其它输出设备(文件,打开文件操作符,或打印机等等)1,2分别是标准输出,错误输出。
ls -l /
:命令默认将执行结果输出到屏幕
ls -l / 1> ls.txt
1:代表的是ls命令的文件描述符,表示的是ls的标准输出
>:代表的输出重定向,这里重定向到后面的ls.txt文件中
文件描述符与重定向操作符之间不能出现空格,因为bash会用空白符切割字符串,有空格会认为1是一个文件
# 创建ls.txt文件
[root@localhost ~]# touch ls.txt# 将文件的标准输出,输入到ls.txt文件中
[root@localhost ~]# ls -l / 1> ls.txt# 查看文件内容
[root@localhost ~]# cat ls.txt
total 28
lrwxrwxrwx. 1 root root 7 Apr 17 04:26 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 May 15 23:07 boot
drwxr-xr-x. 3 root root 18 Jul 20 21:45 data
drwxr-xr-x. 20 root root 3240 Oct 14 07:20 dev
-rw-r--r--. 1 root root 400 Jul 22 20:21 dump.rdb
drwxr-xr-x. 85 root root 8192 Oct 14 07:22 etc
drwxr-xr-x. 5 root root 39 Aug 20 04:24 home
lrwxrwxrwx. 1 root root 7 Apr 17 04:26 lib -> usr/lib
……
再次执行ls -l /root 1> ls.txt
命令,会发现文件ls.txt中只有/root的内容
因为:>操作符是覆盖重定向
# 覆盖重定向
[root@localhost ~]# ls -l /root 1> ls.txt# 查看文件内容
[root@localhost ~]# cat ls.txt
total 0
-rw-r--r--. 1 root root 0 Oct 14 09:21 ls.txt
>>:是追加重定向操作符
这样就能追加内容
# 追加重定向
[root@localhost ~]# ls -l /root 1>> ls.txt# 查看文件内容
[root@localhost ~]# cat ls.txt
total 0
-rw-r--r--. 1 root root 0 Oct 14 09:22 ls.txt
total 4
-rw-r--r--. 1 root root 54 Oct 14 09:22 ls.txt
注意:文件描述符在这种重定向到文件的操作中可以省略
# 省略文件描述符
[root@localhost ~]# ls -l /root > ls.txt# 省略文件描述符
[root@localhost ~]# ls -l /root >> ls.txt
ls -l / /god
命令让ls显示根目录/和/god目录的内容,但是我们的系统的/目录下没有god目录
输出的结果中包含可以显示内容的/的输出,和一个没有找到/god的报错输出
这个报错输出就是程序的错误输出
[root@localhost ~]# ls -l / /god
ls: cannot access /god: No such file or directory
/:
total 24
lrwxrwxrwx. 1 root root 7 Apr 17 04:26 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 May 15 23:07 boot
drwxr-xr-x. 3 root root 18 Jul 20 21:45 data
……
如果想将错误输出重定向:
# 创建lserr.txt
[root@localhost ~]# touch lserr.txt# 将错误输出,输入到lserr.txt
[root@localhost ~]# ls -l / /god 2> lserr.txt
/:
total 24
lrwxrwxrwx. 1 root root 7 Apr 17 04:26 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 May 15 23:07 boot
drwxr-xr-x. 3 root root 18 Jul 20 21:45 data
drwxr-xr-x. 20 root root 3240 Oct 14 07:20 dev
-rw-r--r--. 1 root root 400 Jul 22 20:21 dump.rdb
drwxr-xr-x. 85 root root 8192 Oct 14 07:22 etc
……# 查看保存内容
[root@localhost ~]# cat lserr.txt
ls: cannot access /god: No such file or directory
追加的方式:
# 将保存内容,追加到lserr.txt
[root@localhost ~]# ls -l / /god 2>> lserr.txt
/:
total 24
lrwxrwxrwx. 1 root root 7 Apr 17 04:26 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 May 15 23:07 boot
drwxr-xr-x. 3 root root 18 Jul 20 21:45 data
drwxr-xr-x. 20 root root 3240 Oct 14 07:20 dev
……# 查看文件内容
[root@localhost ~]# cat lserr.txt
ls: cannot access /god: No such file or directory
ls: cannot access /god: No such file or directory
分别将输出重定向到不同的文件中
# 将输出结果分别覆盖输入到文件中
[root@localhost ~]# ls -l / /god 1> ls.txt 2> lserr.txt# 标准输出文件
[root@localhost ~]# cat ls.txt
/:
total 24
lrwxrwxrwx. 1 root root 7 Apr 17 04:26 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 May 15 23:07 boot
drwxr-xr-x. 3 root root 18 Jul 20 21:45 data
……# 错误输出文件
[root@localhost ~]# cat lserr.txt
ls: cannot access /god: No such file or directory
如果向重定向到同一个文件,这里会被覆盖,要用追加的方式:
# 将输出结果分别追加输入到文件中
[root@localhost ~]# ls -l / /god 1>> ls.txt 2>> lserr.txt# 标准输出文件
[root@localhost ~]# cat ls.txt
/:
total 24
lrwxrwxrwx. 1 root root 7 Apr 17 04:26 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 May 15 23:07 boot
drwxr-xr-x. 3 root root 18 Jul 20 21:45 data
drwxr-xr-x. 20 root root 3240 Oct 14 07:20 dev
……# 错误输出文件
[root@localhost ~]# cat lserr.txt
ls: cannot access /god: No such file or directory
ls: cannot access /god: No such file or directory
ls: cannot access /god: No such file or directory
也可以用文件描述符重定向到文件描述符
语法: 文件描述符>& 文件描述符
注意:>&前面必须有文件描述符,且不能有空格,后面的数字才能被认为是文件描述符
# 创建lsall
[root@localhost ~]# touch lsall.txt# 将所有输出结果,输入到lsall文件(方式1)
[root@localhost ~]# ls -l / /god > lsall.txt 2>&1# 查看内容
[root@localhost ~]# cat lsall.txt
ls: cannot access /god: No such file or directory
/:
total 24
lrwxrwxrwx. 1 root root 7 Apr 17 04:26 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 May 15 23:07 boot
drwxr-xr-x. 3 root root 18 Jul 20 21:45 data
……# 将所有输出结果,输入到lsall文件(方式2)
[root@localhost ~]# ls -l / /god &> lsall.txt # 查看内容,结果相同
[root@localhost ~]# cat lsall.txt
ls: cannot access /god: No such file or directory
/:
total 24
lrwxrwxrwx. 1 root root 7 Apr 17 04:26 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 May 15 23:07 boot
drwxr-xr-x. 3 root root 18 Jul 20 21:45 data
……
三、输入重定向
一)来自文件
read命令:
# 获取键盘输入
[root@localhost ~]# read var01
abc# 查看
[root@localhost ~]# echo $var01
abc
read命令开启输入流,遇到换行符结束输入,将输入流的内容赋值给变量
[root@localhost ~]# read var 0< /etc/profile# 查看变量
[root@localhost ~]# echo $var
# /etc/profile
我们修改了read命令的输入源,使其来自文件,但是因为read命令的自身特征,读取第一行后遇到换行符,所以,只将第一行内容保存到变量var中
0<:0是标准输入的文件描述符,<是输入重定向操作符,后面要接文件
二)来自字符串
将字符串放入输入流
# 输入hello world
[root@localhost ~]# read var03 <<< "hello world"# 查看输出内容
[root@localhost ~]# echo $var03
hello world
<<<:是输入重定向操作符,将命令的输入源重定向为操作符后面的字符串
[root@localhost ~]# vi test.sh
#!/bin/bash
echo "----------"
cat <<EOF
hello world
hello linux
EOF
echo "---------"[root@localhost ~]# bash test.sh
----------
hello world
hello linux
---------
<<:是重定向操作符,其后紧随的字符串为边界字符串,与结束的边界字符串组合,将其中的内容放入命令的标准输入中
如果将cat换成read,依然会受到换行符的影响
三)基于文件描述符操作的重定向
exec命令:
Replace the shell with the given command.
bash的内部命令
[root@localhost ~]# exec ls -l /
total 24
lrwxrwxrwx. 1 root root 7 Apr 17 04:26 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 May 15 23:07 boot
……
Connection closing...Socket close.Connection closed by foreign host.Disconnected from remote host(192.168.100.160) at 21:52:39.
可以看到ls命令成功执行了,但是我们的xshell也断开了链接
因为exec调用内核系统调用将ls命令的指令替换当前bash的进程,指令接收后退出进程,所以我们的bash链接就中断了
这里我们可以调用exec命令,而不给出替换命令,只附加重定向操作符
这样我们就可以实现对当前bash开启文件描述符
这里我们可以调用exec命令,而不给出替换命令,只附加重定向操作符
这样我们就可以实现对当前bash开启文件描述符
[root@localhost ~]# exec 8< /etc/profile# 输入文件描述符8
[root@localhost ~]# ls -l /proc/$$/fd
total 0
lrwx------. 1 root root 64 Oct 14 09:53 0 -> /dev/pts/0
lrwx------. 1 root root 64 Oct 14 09:53 1 -> /dev/pts/0
lrwx------. 1 root root 64 Oct 14 09:53 2 -> /dev/pts/0
lrwx------. 1 root root 64 Oct 14 09:53 255 -> /dev/pts/0
lr-x------. 1 root root 64 Oct 14 09:53 8 -> /etc/profile
可以看到我们的bash多了一个输入文件描述符8指向文件/etc/profile
# read输入内容
[root@localhost ~]# read var04 0<& 8# 查看内容
[root@localhost ~]# echo $var04
# /etc/profile# 用cat输入,查看内容
[root@localhost ~]# cat 0<& 8
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
……
这里我们使用重定向操作符<&来复制输入文件描述符8给命令cat的标准输入0
类似的输出使用>&重定向操作符
# 创建out.txt
[root@localhost ~]# touch out.txt# 定义输入文件9
[root@localhost ~]# exec 9> out.txt# 将输出结果输入到9(输入文件/root/out.txt)中
[root@localhost ~]# ls -l ./ >& 9# 查看out文件
[root@localhost ~]# cat out.txt
total 16
-rw-r--r--. 1 root root 1132 Oct 14 09:38 lsall.txt
-rw-r--r--. 1 root root 100 Oct 14 09:35 lserr.txt
-rw-r--r--. 1 root root 2164 Oct 14 09:35 ls.txt
-rw-r--r--. 1 root root 0 Oct 14 10:00 out.txt
-rw-r--r--. 1 root root 86 Oct 14 09:49 test.sh# 将错误信息输入到out中
[root@localhost ~]# ls -l /god 2>& 9# 查看
[root@localhost ~]# cat out.txt
ls: cannot access /god: No such file or directory
这里再次强调重定向操作符前如果给出文件描述符,不能出现空格
# 关闭文件描述符
[root@localhost ~]# exec 8<&-[root@localhost ~]# exec 9<&-
以上是关闭文件描述符
# 将输出信息,输入到out中
[root@localhost ~]# ls -l /god >& 9# 输出错误,把9作为文件,在当前目录创建了9
[root@localhost ~]# ls -l /god &> 9
[root@localhost ~]# ll
total 24
-rw-r--r--. 1 root root 49 Oct 14 10:06 9
-rw-r--r--. 1 root root 1132 Oct 14 09:38 lsall.txt
-rw-r--r--. 1 root root 100 Oct 14 09:35 lserr.txt
-rw-r--r--. 1 root root 2164 Oct 14 09:35 ls.txt
-rw-r--r--. 1 root root 49 Oct 14 10:05 out.txt
-rw-r--r--. 1 root root 86 Oct 14 09:49 test.sh
以上两种都是特殊写法
>&操作符后面有两种情况:数值/字符串
数值:一定是一个有效的文件描述符
字符串:代表一个有效的文件
而&>操作符只能接文件
# 允许允许的命令:
[root@localhost ~]# ls -l /god >& 9
ls: cannot access /god: No such file or directory
如果换成:ls-l /god &> 9
,则不能将标准输出和错误输出到9的文件中
所以根据自己的情况,如果明确想文件输出推荐使用&>
四、重定向综合案例—一切皆文件
/dev/tcp/www.baidu.com/80
将百度的地址端口映射为文件系统路径
开启文件描述符实际是对baidu的socket连接
[root@localhost ~]# exec 12<> /dev/tcp/www.baidu.com/80
通过echo的标准输出,将http协议的请求头输出到12文件描述符,起始就是通过socket发送给baidu的服务器
[root@localhost ~]# echo -e "GET / HTTP/1.0\n" >& 12
baidu服务器的返回可用通过12文件描述符读取到
[root@localhost ~]# cat <& 12
HTTP/1.0 200 OK
Accept-Ranges: bytes
Cache-Control: no-cache
Content-Length: 9508
Content-Type: text/html
……
注意,这个执行过程要快,时间长了,socket就超时断开连接了
相关文章:

20 Shell Script输入与输出
标出输入、标准输出、错误输出 一、程序的基本三个IO流 一)文件描述符 任何程序在Linux系统中都有3个基本的文件描述符 比如: cd/proc/$$/fd 进入当前shell程序对于内核在文件系统的映射目录中: [rootlocalhost ~]# cd /proc/$$/fd [rootlocalhos…...

HCIP-HarmonyOS Application Developer 习题(十六)
(判断)1、HiLink通过分布式软总线的方式连接所有设备,强能力设备可对弱能力设备进行设备虚拟化,将弱设备当做本机设备直接调用。 答案:错误 分析:HiLink 主要针对的是应用开发者与第三方设备开发者…...
没有什么可以抵达乌托邦,包括AI
本文为《智人之上:从石器时代到AI时代的信息网络简史》书评 可以说,尤瓦尔赫拉利又一次让我们获得了理解人类文明的新视角。 这是他一直以来都在做的:构建理解人类文明史的新知识框架。从此前的《人类简史》《未来简史》《今日简史》,到今天的新书《智人之上》,他一直保…...

家庭事务管理系统|基于java和vue的家庭事务管理系统设计与实现(源码+数据库+文档)
家庭事务管理系统 目录 基于java和vue的家庭事务管理系统 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师,阿里云…...

doris创建异步物化视图(加速数据低频变更的复杂实时计算)
异步物化视图,可以把那些每次实时计算非常耗时的,而需要计算的数据变更比较低频的这些计算创建对应的异步物化视图,当相关数据变化的时候触发异步任务去更新计算结果,或者定时计算也可以。例如该处示范为计算订单的订单标识&#…...

PhpSpreadsheet创建带复杂表头的excel数据
目录 一:背景 二:excel表头数据实现 三:excel渲染数据实现: 四:最终效果如下: 一:背景 最近需要统计一些数据,导出到excel,主要是一些区域的人员销售统计数据,涉及到复杂的表头和…...

BurpSuite渗透工具的简单使用
BurpSuite渗透工具 用Burp Suite修改请求 step1: 安装Burp Suite。官网链接:Burp Suite官网 step2: 设置代理 step3: 如果要拦截https请求,还需要在客户端安装证书 step4: 拦截到请求可以在Proxy ->…...

洞察云上风险,主机安全尽在掌握
在实战攻防演练中,主机一直是攻击方的最终目标。作为网络架构中的重要组成部分,主机包含了大量的敏感数据、关键服务和系统资源。同时主机拥有网络资源的访问权限,攻击者通过入侵主机获得权限,进而控制整个网络或系统。因此做好主…...
使用kimi编辑助手,开始搭建一个微信小程序!第一天
为什么开源?因为不开源,一个人开发小程序,一点突如其来的变故就会导致自己整体处于一个不舒服的状态,同时自己从0开始1开始搭建小程序,也是自己个体之间能力的验证! 目前小程序版本:2.5.2 目前…...
【已解决】libev not found
学习韦东山老师的Linux应用开发实验班的JSON部分,在编译JSON包的过程中 报错命令: ./configure --hostarm-buildroot-linux-gnueabihf -prefix$PWD/tmp 错误信息: checking for libev support... checking for arm-buildroot-linux-gnue…...

qt QVariant详解
QVariant是Qt框架中一个功能强大的变体类,它提供了一种通用的方式来存储Qt对象及其他类的值,能够以类似于指针的方式存储任意类型的值。 一、 主要特性 通用性:QVariant可以存储几乎所有数据类型,包括基本数据类型(如…...

再获殊荣!通付盾当选信息技术应用创新工作委员会技术活动单位称号
近日,通付盾凭借其在信息技术应用创新领域的卓越贡献和突出表现,荣获“信息技术应用创新工作委员会技术活动单位”称号。这一荣誉不仅是对通付盾在技术创新和信息安全领域努力的肯定,更是对其在推动国家信息技术应用创新发展中发挥重要作用的…...
PostgreSQL模板数据库template0和template1的异同点
PostgreSQL模板数据库 PostgreSQL有两个模板数据库:template0和template1,template0是不可修改的,而template1是可以修改的。 那模板数据库有什么作用呢?顾名思义,当做模板。 其实我们创建数据库 CREATE DATABASE 其…...

手机ip切换成全局模式怎么弄
在当今数字化时代,智能手机已成为我们日常生活中不可或缺的一部分,无论是工作、学习还是娱乐,都离不开它的陪伴。随着网络技术的不断发展,手机IP地址的切换技术也逐渐走进大众视野,中,“全局模式” 作为IP切…...

前端学习笔记(1.0)
在开发项目时,需要使用符号来代替书写./和../等麻烦的路径书写,所以就遇到了下面的问题。 输入没有路径提示 我们都知道,设置是通过配置vite等脚手架工具的配置文件,设置别名即可。 但是如果需要在使用的时候需要出现路径提示&…...

推动TMS-EEG数据预处理标准化
摘要 将非侵入性脑刺激(NIBS)技术与脑电生理活动记录相结合是神经科学领域广泛使用的方法。同时结合经颅磁刺激(TMS)与脑电图(EEG)尤其成功。但是,为了有效地与大脑活动进行交互,所需的强磁脉冲不可避免地会在同步EEG采集过程中产生伪影。因此ÿ…...

国产电脑能装win系统吗_国产电脑安装windows要求及方法
国产电脑能装win系统吗?国产电脑可以安装Windows系统,但需要满足特定条件。目前只有CPU基于X86架构国产电脑才可以安装windows。下面小编就和大家一起来分析下国产电脑安装windows要求及方法。 国产电脑能装win系统吗? 答:国产电脑可…...
C#Winform的控件基类Control
C# Winform中,所有控件都继承自Control类,这个类提供了许多关键属性和事件,以及字段,它们是构建Windows窗体应用程序的基础。以下是对Control类的一些关键属性和事件以及字段的介绍: 关键属性 Anchor:获取…...
汽车电子行业的LIMS:提升质量与效率的关键助力
汽车电子行业的蓬勃发展,得益于汽车智能化、电动化的趋势不断推进。从先进的车载娱乐系统到复杂的电子控制单元,汽车电子产品的质量直接关系到整车的性能、安全和用户体验。因此,严格的检测和质量控制成为汽车电子企业不可或缺的环节。LIMS在…...
移动端面试问题笔记(一)
1. 1pxborder的问题 原因: 设备像素比不同 从移动端的角度说个具体的场景,以iphone6为例。 iphone6的屏幕宽度为375px,设计师做的视觉稿一般是750px,也就是2x,这个时候设计师在视觉稿上画了1px的边框,于是你就写了“bo…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...