Python —— 简述

Houdini的PythonScript基本使用 Houdini的节点基础类型为OpNode, 子类型分为ObjNode, SopNode, LopNode等.这节主讲。 阅读详情
AI摘要

本文详细介绍了Houdini中的Python、VEX语言在节点控制、脚本编写、几何体操作、UI交互以及自定义函数等方面的应用,包括节点管理、参数编辑、几何体对象的创建和编辑,以及如何在Houdini中进行文件操作和自定义功能的实现。

目录

一,Houdini中调用Python的方式

二,节点及节点参数编辑

节点编辑

节点参数编辑

三,几何体及几何体组编辑

几何体编辑

几何体组编辑

四,UI窗口

五,函数

六,其他


Houdini Python | 笔记合集 - 知乎

Houdini内置三大语言:

  • 表达式,主要用于节点参数控制,可实现跨模块控制;
  • vex,速度最快(比表达式和Python快一个数量级),非常适合密集型计算环境,应首选;
  • python,注意用于编写脚本,控制pdg,实现houdini以外的功能;可做表达式和vex(材质除外)大部分事情,但最慢;此语言可用于自定义窗口、导出数据、加密、抓取网络数据,任务发布,深度学习等;

一,Houdini中调用Python的方式

  • Python节点;

 

  • Python Shell窗口;

  • Python Source Editor,自定义函数模块,需保存hip文件;
    • 如在该编辑器内定义函数,在Python Shell内调用函数;

//Python Shell内调用函数
hou.session.myFunction()
  • 节点的Operator Type Properties/Scripts,然后可通过button调用hda的脚本;

  • 字符串参数面板,然后可通过button计算参数面板内的代码;

 

  • 工具架工具Scripts;

Parameter callback scripts

        可编写python脚本,会在参数改变时调用;

        事件脚本(event script)能访问在全局字典变量(称为kwargs)内的事件参数,如kwargs["node"]可获取包含参数的hou.OpNode对象,kwargs["parm"]可获取参数的hou.Parm对象;

//hda内PythonModule的Script
def fun(kwargs):
    node = kwargs['node'] //返回该节点
    parm = kwargs['parm'] //返回回调的参数
    parm_name = kwargs['parm_name'] //回调参数的名字,等价于kwargs['parm'].name()
    
//参数的Callback Script
hou.pwd().hm().my_callback(kwargs, hou.pwd())
参数调用的kwargs dictionary内容列表
node包含参数的hou.OpNode对象
parm回调脚本的hou.Parm对象
parm_namehou.Parm的名字,等价于kwargs['parm'].name()
script_parm包含参数的hou.ParmTuple名字,等价于kwargs['parm'].tuple().name()
script_value参数值,等价于kwargs['parm'].eval()
script_value0, script_value1, …数组参数值,等价于[p.eval() for p in kwargs['parm'].tuple()]
script_multiparm_index通常首个multiparm是1,其次是2...
script_multiparm_nesting如参数不是multiparm的实例,值为0;是multiparm的实例,但不包含在其他multiparm的实例,值为1;否则,multiparm实例被嵌套在multiparm实例的一个级别内,返回嵌套级别数;
script_multiparm_index2, …, script_multiparm_indexN仅在script_multiparm_nesting在2或更高,才有效;对应于外部multiparm实例的multiparm实例编号;

二,节点及节点参数编辑

节点编辑
hou.cd(path) //切换当前路径
hou.root() //->hou.OpNode返回根节点,等价于hou.node('/')
//定位指定节点或元素
hou.pwd() //->hou.OpNode 返回当前节点,等价于hou.node('.')
hou.parent() //->hou.OpNode or None 返回当前节点的父节点,等价于hou.node('..')

hou.node(path) //->hou.OpNode or None 返回指定节点对象
hou.nodes(path_tuple) //->tuple of hou.OpNode 返回指定节点对象数组

hou.item(path) //->hou.NetworkMovableItem or None 返回指定NetworkMovableItem对象
hou.items(path_tuple) //->tuple of hou.NetworkMovableItem or None 返回指定NetworkMovableItem对象数组
hou.selectedNodes() //返回所选节点的列表
hou.node('/obj/python').cook(True) //强制重新计算
//节点类型的类别
hou.nodeType() //HOM Funtion
hou.nodeTypeCategories() //返回类别字典
hou.sopNodeTypeCategory() //返回sop类别
node.path() //获取节点的绝对路径
//创建节点
node.createNode('subnet', subnet_name)
node.createInputNode(0, 'box')
node.createOutputNode('box')
//节点状态
node.setDisplayFlag(True)
node.setRenderFlag(True)

node.hide(False)
node.bypass(True)

node.setHighlightFlag(False)
node.setTemplateFlag(False)
node.setSelectableTemplateFlag(False)
node.setSelected(False)
node.setUnloadFlag(False)
node.setHardLocked(True)
node.setSoftLocked(False)
//节点位置
node.position()
node.setPosition(vector2) //(pos.x()+1, pos.y()+1)、hou.Vector2(pos.x()+1, pos.y()+1)
node.move((2,3))
node.moveToGoodPosition()

node.layoutChildren() //自动排列子节点位置,相当于L
//获取节点名字
node.name()
node.setName(newname)
​//复制节点
hou.copyNodesTo(nodes, dest)
node.copyTo(dest)
//选择节点
node.setSelected(True) //设置为选择节点
node.setCurrent(True) //设置当前节点为最后选择的节点
//父子节点
node.parent() //父级节点
node.children() //子节点列表
node.allSubChildren() //递归返回所有子节点
node.allNodes() //递归返回所有子节点,包括本身
node.allItems() //返回所有子项
node.numItems() //子项数

//上游节点
node.inputAncestors() 
//连接节点
node.inputs()
node.input(inputindex)
node.outputs()
node.setInput(0, otherNode)
node.setFirstinput(otherNode)
//节点类型
node.type() //Class Function
node.type().instances()
node.type().name()
node.type().category()
node.changeNodeType(newtype)
//用户数据
node.setUserData(name, value)
node.userDataDict()
node.Data(name)
node.destroyUserData(name)
node.clearUserDataDict()
//注释评论
node.setComment(comment) //设置评论
node.setGenericFlag(hou.nodeFlag.DisplayComment, True) //显示评论
节点参数编辑
//获取节点参数
hou.parm(path)
hou.parmTuple(path)
//计算节点参数
hou.ch(path) //等价于hou.evalParm(path)
hou.evalParm(path)
hou.evalParmTuple(path)
//获取节点参数
node.parm(parm_path)
node.parmTuple(parm_path)
node.parms()
node.parmTuples()
//计算节点参数
node.evalParm(parm_path)
node.evalParmTuple(parm_path)
node.parm(parm_path).eval()
//设置参数
node.setParms(parm_dict)
node.parm(parm_path).set(value)
node.parm(parm_path).rawValue()
node.parm(parm_path).keyframes()
node.parm(parm_path).commponentIndex()
node.parm(parm_path).lock(True)
node.parm(parm_path).pressButton() //调用callback脚本
//ramp参数
ramp_value = node.parm('ramp').eval()
ramp_value.lookup(position)

//添加ramp参数
node = hou.node('/obj/box_object1/null1')
ramp_temp = hou.RampParmTemplate("name","label",hou.rampParmType.Color,default_value=2)
ramp_parm = node.addSpareParmTuple(ramp_temp)
ramp_value = hou.Ramp( (hou.rampBasis.Linear, hou.rampBasis.Linear), (0, 1), ((0.0, 1.0, 0.0), (0.0, 0.0, 0.5)) )
ramp_parm[0].set(ramp_value)

三,几何体及几何体组编辑

几何体编辑

hou.SopNode class,表示surface节点;

hou.Geometry class,几何体对象包含定义几何体形状的点或面;

//创建线
geo = hou.pwd().geometry()

point1 = geo.createPoint()
point1.setPosition(hou.Vector3(1,2,3))
point2 = geo.createPoint()
point2.setPosition(hou.Vector3(0,1,2))

poly = geo.createPolygon(False)
poly.addVertex(point1)
poly.addVertex(point2)
//geo
geo.points() //返回所有点
geo.prims() //返回所有面
geo.pointAttribs() //返回所有点属性
geo.primAttribs() //返回所有点属性
geo.vertexAttribs() //返回所有点属性

geo.addAttrib(type, name, default_value, transform_as_normal=False, create_local_variable=True)

point.setAttribValue(name_or_attrib, attrib_value)
prim.setAttribValue(name_or_attrib, attrib_value)
vertex.setAttribValue(name_or_attrib, attrib_value)
geo.setGlobalAttribValue(name_or_attrib, attrib_value)
//point
point.number()
point.position()
point.prims()
point.vertices()
//prim
prim.number()
prim.points()
prim.vertices()
几何体组编辑
//返回对应的所有组
geo.pointGroups()
geo.primGroups()
geo.edgeGroups()
geo.vectexGroups()

//创建对应的组
geo.createPointGroup(name, is_ordered=False)
geo.createPrimGroup(name, is_ordered=False)
geo.createEdgeGroup(name, is_ordered=False)
geo.createVertexGroup(name, is_ordered=False)

//查找对应的组
geo.findPointGroup(name)
geo.findPrimGroup(name)
geo.findEdgeGroup(name)
geo.findVertexGroup(name)

四,UI窗口

//显示提示框
hou.ui.displayMessage(text)
hou.ui.displayConfirmation(text)
hou.ui.displayNodeHelp(node.type())
hou.ui.displayFileDependencyDialog()
//输入弹窗
hou.ui.readInput("Insert text") //单行
hou.ui.readMultiInput(message = "Enter parms:",
input_labels = ["height","lRadius","uRadius","frequency"],
initial_contents = ["20","10","0","3"]) //多行
//文件选择弹窗
hou.ui.selectFile()

五,函数

//自定义函数
def fun(kwargs):
    return kwargs
node.asCode() //打印重建此节点所需的代码
str() //转化为字符类型
exec(str) //将字符做为代码运行
locals().get("var") //是否已存在指定的局部变量
//展开字符串内的局部变量或表达式,已废弃使用hou.text.expandString 
hou.expandString(str)
//在给定帧展开字符串内的局部变量或表达式,已废弃使用 hou.text.expandStringAtFrame
hou.expandStringAtFrame(str, frame_number) 
//hou.Vector3 class
vector.length()
vector.normalized()
vector.distanceTo(vector3)
vector.dot(vector3) 
vector.cross(vector3)
angleTo(vector3) 
x()、y()、z()
//获取图像分辨率
imageResolution(image_file_name)
//获取运行的houdini的路径
hou.houdiniPath()
//设置节点的默认表达式语言
node.setExpressionLanguage(hou.exprLanguage.Hscript)
//将节点从指定版本同步到其HDA定义的当前版本
node.syncNodeVersionIfNeeded(from_version)
//加载自定义hda
hou.hda.installFile(hda_file_path)
//存储当前文件
hou.hipFile.save()
//加载一个新文件
hou.hipFile.load()

六,其他

自定义运行节点代码按钮

  • 在节点创建多行字符串参数,语言改为Python;
  • 创建按钮参数,并编写Python调用脚本(callback script);
//current_node = kwargs['node']
//kwargs = hou.pwd() = kwargs['node']
exec(kwargs['node'].parm('code').eval())
//或
exec(hou.pwd().parm('code').eval())

for…in…语句

paths = ['/obj/geo1', '/obj/geo2']
for path in paths:
    print(hou.node(path))

enumerate()枚举函数

houdini+python+pycharm+RPC环境配置 1.什么是RPC? houdini官网RPC的解释: https://www.sidefx.com/docs/houdini/hom/rpc.html 简单来说,RPC就是,你可以编写,与houdini毫无关系的python工程文件,你可在其中自由的处理你的数据,当要将这些处理好的数据,转换为3D模型时,你可通过RPC将这些数据,传给Houdini绘制出,你想要的的3D模型。 2.pycharm中python环境配置 既然RPC可以编写与houdini毫无关系的python工程文件,那么你可以自由的创建一 阅读详情

相关推荐

Houdini----Python

这篇记录自己学习H过程中Py的部分脚本工具。 #来自吕老师的一个教程: #需要注意的就是Houdini中设置父子关系的时候,如果要保留子级的原始的transform,在界面操作中要勾选Keep Position When Parenting,而在Py中操作时相当于保存transform,设置父子关系后在把transform复原回去 def createParentGeo(num): ...

C.P.的博客 2918

基于Python的Houdini插件开发

Houdini是基于QT进行的开发,支持 Python、HScript二种脚本进行插件开发。 本文以Python开发为例来进行说明,环境说明: (1) Python 3.x(我用的版本是 3.9 版本) (2)IDE开具 PyCharm(我用的版本是 PyCharm Community Edition 2021.3.2) (3)Houdini,我安装的版本是 Houdini 19.0.455 Python相关环境所在的位置(Shell、Source Editor、Panel Editor) Sh

m0_59485658的博客 2113

DBSCAN 具有噪声的基于密度的聚类算法简述 附Python代码

DBSCAN  DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种很典型的密度聚类算法。 基本概念: 所需参数: 半径:Eps Eps半径内指定的数目(阈值):MinPts 数据点分为三: 1. 核心点:在半径Eps内含有超过MinPts数目的点

新手村 9436

python for houdini——python在houdini中的基础应用01

学了一个星期的python,终于可以在houdini中实操了,但是还是有点懵,对于python的语法还不大熟悉,所以还是得多练多做笔记,看了网上几位大佬的博客,个人觉得入门学习还是挺不错的 python in houdini的基础教程 奈何图片太不清楚,所以自己总结一下 一、houdini中用python的地方主要在 1.写节点上( file/new operator type:有个python形...

peixin_huang的博客 4498

Ubuntu 22.04下Colmap带CUDA支持的编译安装全攻略(附显卡架构查询指南)

本文详细指导在Ubuntu 22.04系统上从源码编译安装支持CUDA加速的Colmap,解决了官方版本无GPU支持导致处理速度慢的问题。重点包括环境依赖准备、CUDA工具链配置、显卡计算能力查询以及完整的编译安装步骤,旨在帮助研究者和开发者高效部署高性能三维重建工具。

gold8的专栏 344

时空数据建模的跨节点联邦图神经网络:KDD21 Cross-Node Federated Graph Neural Network for Spatio-Temporal Data Modeling

前言 联邦学习(FL)虽然已经被广泛研究,但是对复杂的时空依赖关系进行建模以提高预测能力仍然是一个开放的问题。此外目前最优的时空预测模型假定对数据的访问不受限制,忽略了对数据共享的限制。基于此,本文提了一个基于图联邦学习的时空数据模型 Cross-Node Federated Graph Neural Network (CNFGNN),该模型在跨节点联邦学习的约束下,使用基于图神经网络(GNN)的架构对底层图结构进行编码,属于结构化联邦的一种,每个本地模型利用私有数据进行学习,并保持分散性。CNFGNN

qq_56027260的博客 1810

简述python的主要功能和特点_简述Python语言的主要特点

简述Python语言的主要特点答:简单、高级、面向对象、可扩展性、免费开源、可移植性、丰富的库、可嵌入性有的分子生物学家指出,生物进化的根基是“盲目的纯粹偶然性”。从哲学上看,这是一种答:唯心主义非决定论德国政党政治体系的稳定性归因于:()答:政党选民社会环境的一致性下列()一词,能够用来形容潘天寿先生清晰的笔墨关系。答:理性于德翔等创立特锐德的背景是什么?答:中国铁路提速下面选项中属于女性的五种...

weixin_42523529的博客 659

wsl + vscode 离线配置 ERROR: Faild to download https://update.code.visualstudio.com

很多情况下是没有现成的VS Code Server程序的,需要手动下载。记住上面的Commit ID,可以通过下面的链接下载 vscode-server-linux-x64.tar.gz。然后将vscode-server-linux-x64.tar.gz上传在服务器上的$HOME/.vscode-server/bin文件夹中,解压。在wsl中下载不了 vscode 的核心。运行下面两行命令,建立空的$HOME/.vscode-server/bin文件夹。重新运行 wsl与vs的链接即可。

点云算法工程师 3789

简述:Python与Anaconda

解说:既安装Python又安装Anaconda会怎么样 更新历史 20190430: 首次发布 Python是一门易于入门又好用的编程语言1。 我们可以从Python官网下载Python并安装它,然后使用自带的IDLE编辑器来编写程序,如下图所示。如果我们需要使用第三方库,在大多数情况下,可以通过"pip install 第三方库的名称"的方式联网下载并安装第三方库。 有一个跟Pytho...

永恒的止水的博客 1346

从零到英雄:WSL2与Ubuntu22.04的终极性能调优指南

本文详细介绍了如何在Windows系统中通过WSL2与Ubuntu22.04进行性能调优,涵盖内核定制、GPU加速、网络优化等关键技巧,帮助开发者打造媲美原生Linux的高性能开发环境,特别适合AI训练和大数据处理等资源密集型任务。

weixin_29218509的博客 523

基于车辆运动学的规划算法 - Hybrid A*/ State Lattice Planning (前置知识:自行车模型、Dubins、Reeds Shepp、多项式曲线、螺旋曲线)

本文将按顺序讲解基于车辆运动学的规划算法,以及需要的前置知识:自行车模型、Dubins和Reeds Shepp曲线、多项式曲线和螺旋曲线

BigDavid123的博客 4858

简述python爬虫_简述几种高效的Python爬虫框架

简述几种高效的Python爬虫框架!Python是现在非常流行的编程语言,而爬虫则是Python语言中最典型的应用,下面是几种高效的Python爬虫框架,看看你是否都用过。1.ScrapyScrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。2.PySpiderPyspider 是一个用python实现的功能强大的网络爬...

weixin_39727402的博客 129

前沿数据解析 | 麻省理工-斯坦福-丰田研究中心电池数据集:AI驱动下的电池寿命早期预测

本文解析了麻省理工、斯坦福与丰田研究中心联合发布的电池数据集,展示了AI驱动下的电池寿命早期预测技术。通过分析124个商用锂离子电池的完整生命周期数据,研究团队仅用前100次循环数据即可准确预测电池报废时间,为电动汽车电池管理提供革命性解决方案。数据集包含LFP/石墨体系电池的详细测试记录,结合差分容量分析和梯度提升树模型,预测精度显著提升。

weixin_26950847的博客 529

python sys模块函数简述

python,sys模块常用功能简述: sys.path sysversion sys.version_info sys.platform sys.argv sys.exit() sys.stdout.write("a")

zytbshao的博客 923

N5105核显直通PVE:从黑屏到HDMI输出的完整指南

PCI直通能让虚拟机独占物理设备,但核显直通远没有独显那么轻松。Intel核显与CPU、显示输出链路的强耦合使UEFI引导、GOP驱动、驱动签名等环节都成了黑屏陷阱。在PVE虚拟化环境中,通过IOMMU开启、vfio-pci绑定、OVMF固件和Q35机型配合,可以绕过KVM检测,让Windows虚拟机正确驱动核显,从HDMI口输出画面,并解锁Intel Quick Sync硬解能力。这种方案尤其适合N5105等低功耗迷你主机,可作为客厅HTPC、本地视频硬解或依赖硬件加速的轻量工作台。本文基于N5105平台

weixin_31082403的博客 373

在Ubuntu上安装Node.js编程

在Ubuntu操作系统上安装Node.js是非常简单的,本文将为您提供详细的安装步骤。这是一个简单的Node.js HTTP服务器示例,它将在本地主机的端口3000上监听请求,并返回"Hello, World!npm是Node.js的包管理器,您可以使用它来安装和管理Node.js模块。您已成功在Ubuntu上安装了Node.js,并创建并运行了一个简单的Node.js应用程序。现在,您已经成功安装了Node.js和npm,让我们创建一个简单的Node.js应用程序并运行它。如有任何疑问,请随时提问。

CodeNexus的博客 3524

python多维列表简述

可以理解为多个三维列表组成的集合,常用于处理一些具有更复杂结构的数据,如在处理视频数据时,若将视频看作是由多个帧组成,每个帧是一个三维的图像数据(包含高度、宽度和颜色通道),那么整个视频就可以用四维列表来表示,其中第四维可以表示时间维度上的帧序列。在实际应用中,还可能会遇到更高维度的列表,但随着维度的增加,数据的理解和处理难度也会急剧上升,通常需要结合具体的业务场景和数据特点来选择合适的数据结构。其形式是列表中的每个元素也是一个列表,每个子列表的长度可以相同,也可以不同。它是列表的列表的列表。

buw369521的博客 1161

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

简述python的编程规范_python编程规范

一 代码风格:(0)参考google代码规范:*链接:http://zh-google-styleguide.readthedocs.org/en/latest/google-python-styleguide/(1)缩进:*python通过缩进对齐来表达代码逻辑:同一层次的语句必须有相同的缩进,每组这样的语句称为一个块。*不要混合使用制表符(tab)和空格来缩进,跨平台时无法正常工作。强烈建议:...

weixin_39614637的博客 418

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

简述python_Python简述

小编给读者们分享一下Python线程池模块ThreadPoolExecutor用法,文中结合实例形式分析了Python线程池模块ThreadPoolExecutor的导入与基本使用方法,对此感兴趣的小伙伴就随小编来了解一下吧。Python3内置的有Threadingpool和ThreadPoolExecutor模块,两个都可以做线程池,当然ThreadPoolExecutor会更好用一些,而且也有...

weixin_39619481的博客 128

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

python虚拟环境操作简述

一、利用第三包进行设置虚拟环境 首先安装虚拟环境包 pip3 install virtualenv 安装完成后,在python文件夹中的Scripts文件夹中就会出现一个“ virtualenv.exe ”,再在当前文件夹下打开cmd,进入命令行模式 当前目录下创建虚拟环境就直接:virtualenv + 虚拟环境名 指定目录下创建虚拟环境就直接:virtualenv + 路径/虚拟环境名 进入刚指定F盘创建的env虚拟环境,进入到Scripts文件夹中,会看到一个 . bat 的程序,

一名小测试 448

简述python语言的主要领域_简述Python语言经验总结

Python语言是不被大多数人知道的东西,这里就简单概述下Python语言,顺便闲谈一下Python标准库。“俗话”说:库即是语言,语言即是库。由此可见拥有一套高质量、具备良好可复用库对于一门通用开发语言来说有多重要。这也的难怪“C + +老爹”BjarneStroustrup? 逢人就大倒苦水:C++的库还是太少,C++社群需要开发更多高质量的库出来!还好,为Python语言开发一套质量不错的库...

weixin_30851637的博客 202

python简述_Python-基础-入门 简介

Python简介及入门python为什么是python选择自己喜欢的语言,这往往不容易,更多的是根据需求话说,之前是java,大学用了三年+实习半年,后来入职做测试开发后,碰到了python到最后,转python开发了写起来快,缩进,不用打花括号,省手指,读起来舒服…..喜欢,貌似不需要什么太牛的理由,用着顺手舒服就行什么语言之争,编辑器之战啥的,能忽略就忽略吧,能无视就无视吧,工具,够用,用这舒...

weixin_39914863的博客 127

简述python_简述python Scrapy框架

一、Scrapy框架简介Scrapy是用纯Python实现一个为了爬取网站数据,提取结构性数据而编写的应用框架,用途非常广泛。利用框架,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常的方便。它使用Twisted这个异步网络库来处理网络通讯,架构清晰,并且包含了各种中间件接口,可以灵活的完成各种需求。Scrapy是Python世界里面最强大的爬虫框架,它比Be...

weixin_39785081的博客 174

python wrapper_简述python中`functools.wrapper()

简述python中functools.wrapper()首先对于最简单的函数:def a():passif __name__ == ‘__main__‘:print(a.__name__)输出结果:a然后稍微复杂点:def a(func):def wrapper()return func@adef b():passif __name__ == ‘__main__‘print(b.__name__)...

weixin_39823299的博客 365

python-can简述

摘要:最近用到python-can,发现网上参考资料实在不多,也缺乏一定的系统性,特此进行一番整理。——by catmemo 1、简述 python-can库为Python提供了控制器局域网的支持,为不同的硬件设备提供了通用的抽象,并提供了一套实用程序,用于在CAN总线上发送和接收消息。 python-可以在Python运行的任何地方运行; 从具有商用CAN的高功率计算机到USB设备,再到运行Linux的低功率设备(例如BeagleBone或RaspberryPi)。 更具体地说,该库的一些示例用法如下.

qq_21649903的博客 2万+

简述python爬虫_简述python Scrapy框架

一、Scrapy框架简介Scrapy是用纯Python实现一个为了爬取网站数据,提取结构性数据而编写的应用框架,用途非常广泛。利用框架,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常的方便。它使用Twisted这个异步网络库来处理网络通讯,架构清晰,并且包含了各种中间件接口,可以灵活的完成各种需求。Scrapy是Python世界里面最强大的爬虫框架,它比Be...

weixin_39615984的博客 150
上一篇: RBD —— 案例
下一篇: Blueprint —— 蓝图实操
挨代码
博客等级 码龄5年 1696粉丝 384原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值