linux管道的执行顺序
最近有个疑问,netstat -antup|head -500 类似这条命令中,是netstat 执行完然后截取前500条记录还是,netstat 与head 并行执行,netstat 执行完500条就不再继续?
最终答案由酷学园darkdanger大大提供:
唔,我先前都沒有想過這個問題呢....
查了一下再加上一些驗證後
我想管線命令的執行狀況大概是這樣:
1.
管線命令會觸發一個緩衝區(buffer)的建立,讓不同程式從中讀取、寫入資料
2.
管線最末端的程式結束時會觸發緩衝區停止擴充
3.
管線前端的程式則會因為無法再寫入至緩衝區、發生錯誤而終止
測試程式:
代碼: [選擇]
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
p = 0
txt = open("log.txt", "w")
while p < int(sys.argv[1]):
p = p + 1
txt.write("%d\n" % p)
print(p)
txt.close()
程式列印 1000 次,儘管 head 後只顯示 5,但 log.txt 仍寫入了 1000 行:
代碼: [選擇]
./pipe_test.py 1000 |head -5
程式列印 3000 次,出現 IOError,log.txt 內則寫入了 2680 行:
代碼: [選擇]
./pipe_test.py 3000 |head -5
代碼: [選擇]
IOError: [Errno 32] Broken pipe
若改寫成忽略 IOError:
代碼: [選擇]
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
p = 0
txt = open("log.txt", "w")
while p < int(sys.argv[1]):
p = p + 1
txt.write("%d\n" % p)
try:
print(p)
except IOError as error:
pass
txt.close()
則 log.txt 可以順利寫入到 3000 行
相关文章:

为什么学习Python数据分析
为什么学习Python数据分析?这是很多人都比较关注的一个问题,Python编程语言近几年在互联网行业是非常火爆的,尤其是在人工智能这一领域,它会大大的提高我们的工作效率等等,具体来看看下面的详细介绍就知道了。 为什么学习Python数…

Python自动化开发学习6
引子 假设我们要在我们的程序里表示狗,狗有如下属性:名字、品种、颜色。那么可以先定义一个模板,然后调用这个模板生成各种狗。 def dog(name,d_type,color):data {name:name,d_type:d_type,color:color}return data d1 dog(小七,拉布拉多,…

Numpy入门教程:09. 输入和输出
背景 什么是 NumPy 呢? NumPy 这个词来源于两个单词 – Numerical和Python。其是一个功能强大的 Python 库,可以帮助程序员轻松地进行数值计算,通常应用于以下场景: 执行各种数学任务,如:数值积分、微分、…

第二语言综合征
前些天在看一本书,温伯格的《理解专业程序员》,其中提到有的程序员得了第二语言综合征——在学习第三、第四门语言的时候很容易,但是学习第二门简直能要了他们的命。我当时就确定我患了这个毛病,因为我一直想了解Java语言…

Python文件操作:finally子句的使用
finally子句与try-except语句连用时,无论try-except是否捕获到异常,finally子句后的代码都要执行,其语法格式如下: try: 可能出错的语句 ......except: 出错后的执行语句finally: 无论是否出错都会执行的语句 Python在处理文件时&…

Numpy入门教程:练习作业02
背景 什么是 NumPy 呢? NumPy 这个词来源于两个单词 – Numerical和Python。其是一个功能强大的 Python 库,可以帮助程序员轻松地进行数值计算,通常应用于以下场景: 执行各种数学任务,如:数值积分、微分、…

PowerShell 导入 SQL Server 的 PS 模块
接触过UNIX或者Linux 的朋友都知道此类系统有着功能强大、无所不能的壳程序,称之为Shell。微软公司于2006年第四季度正式发布PowerShell,它的出现标志着, 微软公司向服务器领域迈出了重要的一步, 不仅提供简便的图形化操作界面,同时提供类似于Unix, Linu…

ARM嵌入式操作系统启动
任何一个操作系统的启动都至少关注两个方面:1,程序运行栈的初始化。2,处理器外设的初始化。 在ARMv6以及以前的体系结构中,定义了七种模式分别为&…

Html5 aside标签的用法和作用
aside元素用来定义当前页面或者文章的附属信息部分,它可以包含与当前页面或主要内容相关的引用、侧边栏、广告、导航条等其他类似的有别于主要内容的部分。 aside元素的用法主要分为两种。 ● 被包含在article元素内作为主要内容的附属信息。 ● 在article元素之外使…

Numpy入门教程:10. 统计相关
背景 什么是 NumPy 呢? NumPy 这个词来源于两个单词 – Numerical和Python。其是一个功能强大的 Python 库,可以帮助程序员轻松地进行数值计算,通常应用于以下场景: 执行各种数学任务,如:数值积分、微分、…

Windows 7+Code::Blocks+wxWidgets实录(一)
环境配置篇 玩过Linux的人应该对Code::Blocks和wxWidgets并不陌生。 Code::Blocks是一款非常有名的代码编辑器,在linux下用不惯vim的话,这是个不错的选择。但千万不要把它和编译器混淆,CB本身并没有独立编译程序的功能,需要调用系…

技巧:两部解决U盘安装windows 7
第一步:准备一个4G的U盘并使用disk part 工具制作成引导盘1、在运行中输入cmd 回车2、在黑色的命令提示符界面中输入Diskpart3、插入U盘 并输入List Disk查看4、输入Select Disk 1 (选择你的U盘所在的标识)5、输入clean 清除旧的信息6、输入c…

报Java面授班有哪些优势
java技术在互联网行业的高速发展,让很多人都开始学习java技术,大家都想知道学习java技术面授班好还是网络班好,小编觉得当然是面授班比较好,下面小编就带大家来详细的了解一下报Java面授班有哪些优势? 报Java面授班有哪…

刻意练习:Python基础 -- Task13. datetime模块详解
datetime模块 datetime 是 Python 中处理日期的标准模块,它提供了 4 种对日期和时间进行处理的类:datetime、date、time 和 timedelta。 datetime类 class datetime(date):def __init__(self, year, month, day, hour, minute, second, microsecond, t…

关于java和c的选择结构和循环结构
java和c在这些结构上确实没区别。 另学会一个小技巧,在编辑界面选中段落之后按tab可以整体后移选中的段落,再按shifttab可以将选中的段落前移。转载于:https://www.cnblogs.com/hloli/archive/2012/03/15/2398675.html

从控制器到驱动器的WD——硬盘巨头启示录之西数篇
WD(Western Digital,西部数据)公司创立的时间比希捷公司还早近10年,但作为硬盘驱动器供应商的历史可不算长。1970年4月23日,一家名为General Digital(通用数字)的公司诞生了,其最初是…

java程序员入门先学什么开发者工具
学习java编程语言,那么开发工具是肯定少不了的,程序员入门基础中开发工具是一定要学会的,可以帮助开发者们提高开发效率、更优雅的写代码。由于开发者涉及的技术领域众多,以后端开发者的视角盘点平时可能用得到的工具,…

Numpy入门教程:11. 时间日期和时间增量
序言 什么是 NumPy 呢? NumPy 这个词来源于两个单词 – Numerical和Python。其是一个功能强大的 Python 库,可以帮助程序员轻松地进行数值计算,通常应用于以下场景: 执行各种数学任务,如:数值积分、微分、…

C#事件的发送方和接收方(订阅方)
C#事件的发送方和接收方(订阅方)基于Windows的应用程序也是基于消息的,Windows使用预定义消息与应用程序通讯。.NET Framework将Windows消息封装在事件中,可以把事件作为对象之间的通讯介质。事件发送方:发送事件的对象…

后台管理界面模版
http://www.cssmoban.com/cssthemes/houtaimoban/index_3.shtml转载于:https://www.cnblogs.com/hellojesson/p/7805516.html

选择PMP培训学校需要注意哪些
选择PMP培训学校需要注意哪些?如今各大职场对于项目管理这个岗位都是非常有需求的,有需求就有市场,PMP培训相关证书在市面上频繁出现,想要选择PMP培训学校需要注意哪些呢?来看看下面的详细介绍。 首先,我们来详细的了解一下什么…

绝对实用 NAT + VLAN +ACL管理企业网络
在企业中,要实现所有的员工都能与互联网进行通信,每个人各使用一个公网地址是很不现实的。一般,企业有1个或几个公网地址,而企业有几十、几百个员工。要想让所有的员工使用这仅有的几个公网地址与互联网通信该怎么做呢?…

javascript 常用功能總結
1.路径符号的含义 src"/js/jquery.js"、"../"这个斜杠是绝对路径的意思,表示的是网站根目录. 其他的如"./ " 、 "../" 、 "jquery.js" 、 "js/jquery.js"等等表示的都是相对当前网页的路径,…

学习资源:在线学习 Python(一)
背景 Python 是一种通用编程语言,其在科学计算和机器学习领域具有广泛的应用。如果我们打算利用 Python 来执行机器学习的代码,那么对 Python 有一些基本的了解就是至关重要的。 如果我们希望熟悉 Python 基本语法结构,但不希望在本地安装I…

什么BRIEF算法?BRIEF算法详解
BRIEF是一种特征描述子提取算法,并非特征点的提取算法,一种生成二值化描述子的算法,不提取代价低,匹配只需要使用简单的汉明距离(Hamming Distance)利用比特之间的异或操作就可以完成。因此,时间代价低,空间…

OpenLayers 动态添加标记(Marker)和信息窗(Popup)
方式一:使用marker方式 1、在地图上添加标记图层 var markers newOpenLayers.Layer.Markers("Markers"); map.addLayer(markers);//地图初始化添加 2、动态添加标记和Popup方法: //add map initial methodmap.events.register(click, this, fu…
Bag标签之中的一个行代码实行中文分词实例2
例1: 分词(返回以逗号隔开每一个词带上引號的词组。gap",",quotes""或quotes") 单引號 <bag idpPage act2words namewords gap"," quotes"">我喜欢黄色高领T恤衫</bag>…

学习资源:在线学习 Python(二)
背景 Python 是一种通用编程语言,其在科学计算和机器学习领域具有广泛的应用。如果我们打算利用 Python 来执行机器学习的代码,那么对 Python 有一些基本的了解就是至关重要的。 如果我们希望熟悉 Python 基本语法结构,但不希望在本地安装I…

Java培训完可以应用在什么领域
java技术在互联网行业一直都是非常有发展前景的,很多小伙伴都想知道“Java培训完可以应用在什么领域”这个问题,下面小编就来为大家做下详细的介绍。 Java培训完可以应用在什么领域?java的应用非常的广泛,可以用来在开发软件工具、嵌入式…

技术图文:Matlab VS. Numpy 矩阵基本运算
背景 前段时间在知识星球上立了一个Flag,至少写10篇关于 Python,Matlab 和 C# 对比的总结。 这是第 3 篇,对比 Matlab 与 Numpy 在矩阵基本运算方面的区别与联系。 虽然 Numpy 定义了 matrix 类型,使用该 matrix 类型创建的是矩…