干货 | 深度辨析 Python 的 eval() 与 exec()

从CTFHub实战解析eval漏洞:蚁剑连接与Webshell攻防 代码注入是Web安全领域的核心漏洞类型之一,其原理在于应用程序将不可信的用户输入直接作为代码执行。eval函数作为典型的代码执行点,能够将字符串解析为脚本语言指令,若未对输入进行严格过滤,攻击者便可构造恶意Payload实现任意代码执行。这种漏洞的技术价值在于它直接突破了应用逻辑边界,为后续的服务器控制、数据窃取和横向移动提供了入口。在实际应用场景中,从CTF比赛到真实渗透测试,eval漏洞常与蚁剑等Webshell管理工具结合,形成从漏洞利用到持久化控制的完整攻击链。本文基于CTFHub实战案例,深入剖析 阅读详情

点击上方“编程派”,选择设为“设为星标”

优质文章,第一时间送达!

Python 提供了很多内置的工具函数(Built-in Functions),在最新的 Python 3 官方文档中,它列出了 69 个。

大部分函数是我们经常使用的,例如 print()、open() 与 dir(),而有一些函数虽然不常用,但它们在某些场景下,却能发挥出不一般的作用。内置函数们能够被“提拔”出来,这就意味着它们皆有独到之处,有用武之地。

因此,掌握内置函数的用法,就成了我们应该点亮的技能。

1、eval 的基本用法

语法:eval(expression, globals=None, locals=None)

它有三个参数,其中 expression 是一个字符串类型的表达式或代码对象,用于做运算;globals 与 locals  是可选参数,默认值是 None。

具体而言,expression 只能是单个表达式,不支持复杂的代码逻辑,例如赋值操作、循环语句等等。

globals 用于指定运行时的全局命名空间,类型是字典,缺省时使用的是当前模块的内置命名空间。locals 指定运行时的局部命名空间,类型是字典,缺省时使用 globals 的值。两者都缺省时,则遵循 eval 函数执行时的作用域。值得注意的是,这两者不代表真正的命名空间,只在运算时起作用,运算后则销毁。

x = 10

def func():
    y = 20
    a = eval('x + y')
    print('a: ', a)
    b = eval('x + y', {'x': 1, 'y': 2})
    print('x: ' + str(x) + ' y: ' + str(y))
    print('b: ', b)
    c = eval('x + y', {'x': 1, 'y': 2}, {'y': 3, 'z': 4})
    print('x: ' + str(x) + ' y: ' + str(y))
    print('c: ', c)

func()

输出结果:

a:  30
x: 10 y: 20
b:  3
x: 10 y: 20
c:  4

由此可见,当指定了命名空间的时候,变量会在对应命名空间中查找。而且,它们的值不会覆盖实际命名空间中的值。

2、exec 的基本用法

语法:exec(object[, globals[, locals]])

在 Python2 中 exec 是个语句,而 Python3 将其改造成一个函数,像 print 一样。exec() 与 eval() 高度相似,三个参数的意义和作用相近。

主要的区别是,exec() 的第一个参数不是表达式,而是代码块,这意味着两点:一是它不能做表达式求值并返回出去,二是它可以执行复杂的代码逻辑,相对而言功能更加强大,例如,当代码块中赋值了新的变量时,该变量可能 在函数外的命名空间中存活下来。

>>> x = 1
>>> y = exec('x = 1 + 1')
>>> print(x)
>>> print(y)
2
None

可以看出,exec() 内外的命名空间是相通的,变量由此传递出去,而不像 eval() 函数,需要一个变量来接收函数的执行结果。

3、一些细节辨析

两个函数都很强大,它们将字符串内容当做有效的代码执行。这是一种字符串驱动的事件 ,意义重大。然而,在实际使用过程中,存在很多微小的细节,此处就列出我所知道的几点吧。

常见用途:将字符串转成相应的对象,例如 string 转成 list ,string 转成 dict,string 转 tuple 等等。

>>> a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
>>> print(eval(a))
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
>>> a = "{'name': 'Python猫', 'age': 18}"
>>> print(eval(a))
{'name': 'Python猫', 'age': 18}

# 与 eval 略有不同
>>> a = "my_dict = {'name': 'Python猫', 'age': 18}"
>>> exec(a)
>>> print(my_dict)
{'name': 'Python猫', 'age': 18}

eval() 函数的返回值是其 expression 的执行结果,在某些情况下,它会是 None,例如当该表达式是 print() 语句,或者是列表的 append() 操作时,这类操作的结果是 None,因此 eval() 的返回值也会是 None。

>>> result = eval('[].append(2)')
>>> print(result)
None

exec() 函数的返回值只会是 None,与执行语句的结果无关,所以,将 exec() 函数赋值出去,就没有任何必要。所执行的语句中,如果包含 return 或 yield ,它们产生的值也无法在 exec 函数的外部起作用。

>>> result = exec('1 + 1')
>>> print(result)
None

两个函数中的 globals 和 locals 参数,起到的是白名单的作用,通过限定命名空间的范围,防止作用域内的数据被滥用。

conpile() 函数编译后的 code 对象,可作为 eval 和 exec 的第一个参数。

吊诡的局部命名空间:前面讲到了 exec() 函数内的变量是可以改变原有命名空间的,然而也有例外。

def foo():
    exec('y = 1 + 1\nprint(y)')
    print(locals())
    print(y)

foo()

按照前面的理解,预期的结果是局部变量中会存入变量 y,因此两次的打印结果都会是 2,然而实际上的结果却是:

2
{'y': 2}
Traceback (most recent call last):
...(略去部分报错信息)
    print(y)
NameError: name 'y' is not defined

明明看到了局部命名空间中有变量 y,为何会报错说它未定义呢?

原因与 Python 的编译器有关,对于以上代码,编译器会先将 foo 函数解析成一个 ast(抽象语法树),然后将所有变量节点存入栈中,此时 exec() 的参数只是一个字符串,整个就是常量,并没有作为代码执行,因此 y 还不存在。直到解析第二个 print() 时,此时第一次出现变量 y ,但因为没有完整的定义,所以 y 不会被存入局部命名空间。

在运行期,exec() 函数动态地创建了局部变量 y ,然而由于 Python 的实现机制是“运行期的局部命名空间不可改变 ”,也就是说这时的 y 始终无法成为局部命名空间的一员,当执行 print() 时也就报错了。

若想把 exec() 执行后的 y 取出来的话,可以这样:z = locals()['y'] ,然而如果不小心写成了下面的代码,则会报错:

def foo():
    exec('y = 1 + 1')
    y = locals()['y']
    print(y)

foo()

#报错:KeyError: 'y'
#把变量 y 改为其它变量则不会报错

KeyError 指的是在字典中不存在对应的 key 。本例中 y 作了声明,却因为循环引用而无法完成赋值,即 key 值对应的 value 是个无效值,因此读取不到,就报错了。

此例还有 4 个变种,我想用一套自恰的说法来解释它们,但尝试了很久,未果。留个后话吧,等我想明白,再单独写一篇文章。

4、为什么要慎用 eval() ?

很多动态的编程语言中都会有 eval() 函数,作用大同小异,但是,无一例外,人们会告诉你说,避免使用它。

为什么要慎用 eval() 呢?主要出于安全考虑,对于不可信的数据源,eval 函数很可能会招来代码注入的问题。

>>> eval("__import__('os').system('whoami')")
desktop-fa4b888\pythoncat
>>> eval("__import__('subprocess').getoutput('ls ~')")
#结果略,内容是当前路径的文件信息

在以上例子中,我的隐私数据就被暴露了。而更可怕的是,如果将命令改为rm -rf ~ ,那当前目录的所有文件都会被删除干净。

针对以上例子,有一个限制的办法,即指定 globals 为 {'__builtins__': None} 或者 {'__builtins__': {}} 。

>>> s = {'__builtins__': None}
>>> eval("__import__('os').system('whoami')", s)
#报错:TypeError: 'NoneType' object is not subscriptable

__builtins__ 包含了内置命名空间中的名称,在控制台中输入 dir(__builtins__) ,就能发现很多内置函数、异常和其它属性的名称。在默认情况下,eval 函数的 globals 参数会隐式地携带__builtins__ ,即使是令 globals 参数为 {} 也如此,所以如果想要禁用它,就得显式地指定它的值。

上例将它映射成 None,就意味着限定了 eval 可用的内置命名空间为 None,从而限制了表达式调用内置模块或属性的能力。

但是,这个办法还不是万无一失的,因为仍有手段可以发起攻击。

某位漏洞挖掘高手在他的博客中分享了一个思路,令人大开眼界。其核心的代码是下面这句,你可以试试执行,看看输出的是什么内容。

>>> ().__class__.__bases__[0].__subclasses__()

关于这句代码的解释,以及更进一步的利用手段,详见:https://www.tuicool.com/articles/jeaqe2n

另外还有一篇博客,不仅提到了上例的手段,还提供了一种新的思路:

#警告:千万不要执行如下代码,后果自负。
>>> eval('(lambda fc=(lambda n: [c 1="c" 2="in" 3="().__class__.__bases__[0" language="for"][/c].__subclasses__() if c.__name__ == n][0]):fc("function")(fc("code")(0,0,0,0,"KABOOM",(),(),(),"","",0,""),{})())()', {"__builtins__":None})

这行代码会导致 Python 直接 crash 掉,详见:https://segmentfault.com/a/1190000011532358

除了黑客的手段,简单的内容也能发起攻击。像下例这样的写法, 将在短时间内耗尽服务器的计算资源。

>>> eval("2 ** 888888888", {"__builtins__":None}, {})

如上所述,我们直观地展示了 eval() 函数的危害性,然而,即使是 Python 高手们小心谨慎地使用,也不能保证不出错。

在官方的 dumbdbm 模块中,曾经(2014年)发现一个安全漏洞,攻击者通过伪造数据库文件,可以在调用 eval() 时发起攻击。(详情:https://bugs.python.org/issue22885)

无独有偶,在上个月(2019.02),有核心开发者针对 Python 3.8 也提出了一个安全问题,提议不在 logging.config 中使用 eval() 函数,目前该问题还是 open 状态。(详情:https://bugs.python.org/issue36022)

如此种种,足以说明为什么要慎用 eval() 了。同理可证,exec() 函数也得谨慎使用。

5、安全的替代用法

既然有种种安全隐患,为什么要创造出这两个内置方法呢?为什么要使用它们呢?

理由很简单,因为 Python 是一门灵活的动态语言。与静态语言不同,动态语言支持动态地产生代码,对于已经部署好的工程,也可以只做很小的局部修改,就实现 bug 修复。

那有什么办法可以相对安全地使用它们呢?

ast 模块的 literal() 是 eval() 的安全替代,与 eval() 不做检查就执行的方式不同,ast.literal() 会先检查表达式内容是否有效合法。它所允许的字面内容如下:

strings, bytes, numbers, tuples, lists, dicts, sets, booleans, 和 None

一旦内容非法,则会报错:

import ast
ast.literal_eval("__import__('os').system('whoami')")

报错:ValueError: malformed node or string

不过,它也有缺点:AST 编译器的栈深(stack depth)有限,解析的字符串内容太多或太复杂时,可能导致程序崩溃。

至于 exec() ,似乎还没有类似的替代方法,毕竟它本身可支持的内容是更加复杂多样的。

最后是个建议:搞清楚它们的区别与运行细节(例如前面的局部命名空间内容),谨慎使用,限制可用的命名空间,对数据源作充分校验。

来源:Python猫

作者:豌豆花下猫

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版
回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版
回复关键词「m」,立即获取Python精选优质文章合集
回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~
题图:pexels,CC0 授权。

从CTF题到实战:深入剖析eval漏洞原理与立体防御策略 动态代码执行是编程语言中一项强大的功能,它允许程序在运行时将字符串解析为可执行的代码。其核心原理在于模糊了数据与代码的边界,使得用户输入可能被提升为具有程序上下文权限的指令。这项技术的价值在于提供了极高的灵活性,常用于模板渲染、动态表达式计算等场景。然而,当不可信的用户输入直接进入执行流程时,就会形成严重的代码注入漏洞,攻击者可以利用此漏洞执行任意命令、读取敏感文件甚至植入内存马。本文以CTFHub中的典型题目为切入点,结合PHP中的eval函数,系统分析了漏洞的多种利用姿势,包括直接执行、间接触发以及结合 阅读详情

相关推荐

Python图像处理库Pillow漏洞CVE-2017-8291:从eval滥用看远程命令执行风险

在软件安全领域,远程命令执行(RCE)是危害性极高的漏洞类型,它允许攻击者在目标系统上执行任意代码。这类漏洞的根源往往在于对用户输入数据的信任缺失,尤其是在数据解析与反序列化过程中。一个典型的技术风险点是对动态代码执行函数(如Python的eval())的滥用,当不可信数据直接流入eval()时,攻击者便可注入恶意代码。这种模式在图像、文档等文件解析场景中尤为危险,因为解析库通常以应用进程的高权限运行。CVE-2017-8291正是Pillow(Python Imaging Library)库在解析Sun

defkaug153461的博客 511

深度辨析 Python 的 eval() 与 exec()

Python 提供了很多内置的工具函数(Built-in Functions),在最新的 Python 3 官方文档中,它列出了 69 个。 大部分函数是我们经常使用的,例如 print()、open() 与 dir(),而有一些函数虽然不常用,但它们在某些场景下,却能发挥出不一般的作用。内置函数们能够被“提拔”出来,这就意味着它们皆有独到之处,有用武之地。 因此,掌握内置函数的用法,就成了我们应...

weixin_33836223的博客 665

RCE漏洞攻防:从命令注入到代码执行的原理、挖掘与防御实战

远程代码执行(RCE)是Web安全领域的高危漏洞,其核心在于应用程序错误地将用户输入的数据当作代码执行。从原理上看,主要分为命令执行和代码执行两类:命令执行通常源于应用程序将用户输入未经充分过滤便拼接至系统Shell命令中,通过分号、管道等元字符注入额外指令;代码执行则常因危险函数(如eval、exec)或反序列化机制,使得攻击者注入的编程语言代码片段被动态执行。这类漏洞的技术价值在于其极高的危害性,攻击者一旦利用成功,可直接控制服务器,进行数据窃取、植入后门等操作。在应用场景上,常见于网络设备管理、模板渲

weixin_34050005的博客 440

exec()和eval()

主要介绍eval和exec的用法

有的话没说出来之前,你是他的主人,一旦说出来你就成了他的奴隶||想要干好事,别太把自己当人,别把别人太不当人||认识这个人就是开了一扇窗户,就能看到不一样的东西,听到不一样的声音,能让你思考、觉悟,这已经够了 1041

深入解析PHP反向Shell:原理、实战与防御策略

反向Shell是一种常见的网络攻防技术,其核心原理是让目标服务器主动向攻击者控制的监听端发起连接,从而建立一个远程命令执行通道。这种技术利用了防火墙通常对出站流量限制较宽松的特点,能有效绕过网络边界防护。在Web安全领域,理解反向Shell的工作机制对于渗透测试和系统加固都至关重要。通过分析其通信流程和代码实现,可以深入掌握如何利用文件上传、命令注入等漏洞进行利用,同时也能为部署有效的入侵检测和应用程序防护策略提供关键依据。本文以经典的php-reverse-shell为样本,结合代码混淆和权限提升等实战技

weixin_34238633的博客 570

任意代码执行漏洞深度解析:从原理到防御的实战指南

在Web安全领域,代码执行与命令注入是危害性极高的漏洞类型,其核心原理在于程序错误地将用户输入作为指令执行,导致信任边界被突破。从技术实现上看,这通常源于对用户输入数据验证不足,或危险函数的不当调用,使得攻击者能在服务器上下文中执行任意代码或系统命令。这类漏洞的技术价值在于其直接威胁服务器控制权,常被用于数据窃取、服务中断或作为内网渗透的跳板。在应用场景上,常见于存在动态代码执行、系统命令调用或反序列化功能的Web应用、API接口及网络设备管理后台中。本文聚焦于任意代码执行漏洞,深入剖析其产生机制,并结合命

weixin_30333885的博客 353

学习python(十)——eval()和exec()函数

eval() 和 exec() 函数都属于Python的内置函数,由于这两个函数在功能和用法方面都有相似之处。eval() 和 exec() 函数的功能是相似的,都可以执行一个字符串形式的 Python 代码(代码以字符串的形式提供),相当于一个 Python 的解释器。二者不同之处在于,eval() 执行完要返回结果,而 exec() 执行完不返回结果。 eval() 函数的语法格式为:eval(source, globals=None, locals=None, /);而 exec() 函数...

图像学习之旅 672

CTF实战复盘:Web安全与MISC隐写技术深度解析

在网络安全领域,Web安全漏洞与信息隐藏技术是两大核心攻防方向。Web安全漏洞如SQL注入、文件上传绕过等,其原理在于应用程序对用户输入验证不足,导致攻击者可执行恶意操作,其技术价值在于揭示了系统安全边界的脆弱性,广泛应用于渗透测试与代码审计。信息隐藏技术(隐写术)则涉及将数据嵌入图片、音频等载体,其原理基于人类感知冗余,在数字取证与隐蔽通信中有关键应用。本文基于CTF赛事实战,深入剖析了【文件上传漏洞】的多种绕过手法与【SQL注入】的自动化盲注技术,通过具体案例展示了如何将这些技术点转化为可复用的安全方法

weixin_34025051的博客 534

python教程:exec和eval

python教程:exec和eval

Python热爱者的博客 1428

RCE漏洞深度解析:从原理到实战的攻防指南

远程代码执行(RCE)是网络安全领域的核心概念,指攻击者能够通过网络在远程服务器上执行任意代码。其核心原理在于应用对用户输入缺乏充分验证,导致恶意数据被系统或应用解释器执行。理解RCE对于构建安全防线至关重要,它直接关系到服务器的完全控制权。在应用场景上,RCE常通过操作系统命令注入、应用层代码注入(如反序列化、模板注入)以及文件上传漏洞等路径实现。例如,通过精心构造的输入,攻击者可利用系统命令拼接或危险函数(如eval)触发漏洞。本文聚焦于RCE的实战攻防,深入剖析了如Log4j2反序列化等经典漏洞的利用

weixin_33719619的博客 445

HVV攻防实战:远控工具与Webshell流量特征深度解析与溯源

网络流量分析是网络安全防御与事件响应的核心技术,它通过对网络通信数据的深度解析,识别异常行为与潜在威胁。其原理在于,任何网络活动都会在协议层留下可观测的元数据和行为模式,即使通信内容被加密,其通信频率、数据包大小、TLS握手指纹等特征依然暴露了意图。这项技术的核心价值在于为被动防守的蓝队提供了最客观、难以篡改的“犯罪现场”记录,是从海量业务流量中精准定位攻击活动的关键。在HVV(护网行动)、应急响应及高级威胁狩猎等场景中,掌握主流攻击工具的流量特征成为溯源反制的必备技能。例如,Cobalt Strike等远

weixin_34332905的博客 398

Python 的 eval与 exec 安全用法最佳实践

Python 提供了很多内置的工具函数(Built-in Functions),今天我们一起来探索两个函数的安全用法:evel() 与 exec()。 1、eval 的基本用法 由此可见,当指定了命名空间的时候,变量会在对应命名空间中查找。而且,它们的值不会覆盖实际命名空间中的值。 2、exec 的基本用法 3、一些细节辨析 两个函数都很强大,它们将字符串内容当...

python学习者的博客 3814

Flask/Jinja2 SSTI漏洞实战:从原理到RCE利用链完整解析

服务器端模板注入(SSTI)是一种常见的Web安全漏洞,其核心原理在于模板引擎将用户输入误解析为可执行的模板语法。以Jinja2为例,当开发者将用户可控数据直接嵌入模板字符串并调用`render_template_string()`时,攻击者可通过`{{...}}`语法注入恶意表达式。这种漏洞的技术价值在于,它允许攻击者利用模板引擎的表达式解析能力,在服务器端执行任意代码,最终可能导致远程命令执行(RCE)。在应用场景上,SSTI常见于使用Flask、Django等框架的Web应用,尤其在CTF竞赛和真实渗

weixin_33895516的博客 322

Python脚本运行全解析:从基础执行到生产部署的工程化实践

在Python开发中,运行.py文件是基础操作,但背后涉及解释器环境、模块搜索路径和依赖管理等核心原理。理解Python解释器的多重身份(如系统Python与虚拟环境Python的区别)以及sys.path的初始化机制,是确保代码可复现和跨平台兼容的技术基础。这些原理支撑了现代Python项目的工程化价值,使得从简单的命令行脚本到复杂的生产级应用都能稳定运行。在实际应用场景中,开发者需要掌握直接运行与模块运行(python script.py vs python -m module)的本质区别,并善用虚拟环

weixin_30420305的博客 386

RCE漏洞攻防实战:从原理到手工利用与防御体系构建

远程代码执行(RCE)是Web安全领域的高危漏洞类型,其核心原理在于应用程序未能正确处理用户输入,导致数据与代码边界混淆,攻击者可借此在服务器端执行任意命令。理解其底层机制,如命令注入、反序列化、模板注入等不同触发场景,对于构建有效的安全防御至关重要。在工程实践中,针对RCE的攻防已形成体系化方法,攻击方需掌握从信息收集、漏洞探测到绕过WAF、构造利用链及权限维持的完整流程;而防御方则需在安全开发生命周期中贯彻输入验证、最小权限原则,并借助WAF、RASP及主机监控构建纵深防线。本文聚焦于RCE漏洞的手工实

weixin_33882452的博客 352

RCE漏洞攻防全解析:从原理到实战的纵深防御体系

远程代码执行(RCE)是Web安全领域危害性最高的漏洞类型之一,其核心原理在于程序将不可信的用户输入混入了代码执行上下文,例如通过操作系统命令执行函数、脚本语言动态执行函数或反序列化入口等。理解RCE漏洞的形成机制,对于构建有效的安全防御体系至关重要。从技术价值看,RCE漏洞的利用意味着攻击者可能直接获取服务器控制权,导致数据泄露、服务中断等严重后果,因此它始终是攻防对抗的焦点。在应用场景上,RCE常见于Web应用、中间件、框架以及各类服务组件中,例如通过命令注入、代码注入或利用类似Log4j2这样的组件漏

weixin_33698823的博客 461

PHP preg_match绕过:利用取反与异或编码实现无字母数字RCE

在Web应用安全中,正则表达式常用于过滤用户输入,防止恶意代码注入。其原理是通过模式匹配识别并拦截危险字符串,是基础的安全防护手段。然而,当过滤规则存在缺陷时,攻击者可利用底层技术进行绕过,实现远程代码执行(RCE),这对系统安全构成严重威胁。PHP中的位运算,特别是取反(~)和异或(^)操作,能对字符的二进制编码进行变换。基于此,攻击者可在不使用任何字母、数字及大部分特殊符号的情况下,动态构造出如system、eval等危险函数名,从而突破preg_match等函数的过滤。这种技术常出现在CTF竞赛和真实

weixin_34268310的博客 490

MediaPipe+Unity动作捕捉实战:如何用普通摄像头驱动3D人物模型(附避坑指南)

本文详细介绍了如何利用MediaPipe和Unity实现低成本动作捕捉,仅需普通摄像头即可驱动3D人物模型。通过MediaPipe的3D坐标预测能力,结合Unity的骨骼映射优化,解决单目摄像头下的三维重建难题,并提供实战避坑指南和性能优化技巧,帮助开发者快速实现专业级的人物模型驱动效果。

weixin_29047545的博客 359

Web安全头号威胁:注入攻击原理、防御与实战案例全解析

注入攻击是Web安全领域的核心威胁,其本质在于程序错误地将用户输入的数据当作代码执行,导致数据与代码边界混淆。从技术原理看,无论是SQL注入、命令注入还是模板注入,都源于这一根本问题。理解注入机制对于构建安全应用至关重要,其技术价值在于保护数据完整性、防止权限绕过和服务器沦陷。在应用场景上,现代Web应用大量使用JavaScript动态生成DOM元素,前后端交互复杂化扩大了攻击面,使得传统防御手段面临挑战。本文聚焦于注入攻击的深度解析,涵盖从经典SQL注入到DOM型XSS的各类攻击手法,并探讨如何将安全防护

shirlly 433

用Python实现图片风格迁移,让你的图片更加的高逼格!

先来看下效果: 上图是老王在甘南合作的米拉日巴佛阁外面拍下的一张照片,采用风格迁移技术后的效果为: 一些其它效果图: 下面进入正题。 近年来,由深度学习所引领的人工智能(AI)技术浪潮,开始越来越广泛地应用到生活各个领域。这其中,人工智能与艺术的交叉碰撞,在相关技术领域和艺术领域引起了高度关注。就在上个月,由电脑生成的艺术品在佳士得(Christie’s)的拍卖价竟高达43.25万美元,...

Python追梦 6184

比亚迪开放平台接口实战:车身状态监测与智能车联应用开发

本文详细介绍了如何利用比亚迪开放平台的车身状态接口进行智能车联应用开发。通过核心类BYDAutoBodyworkDevice,开发者可以安全获取车辆VIN、车门车窗状态、蓄电池电压、方向盘转角等实时数据,并利用监听器实现状态实时响应。文章提供了从SDK集成、接口调用到典型应用场景(如远程车况检查、车队管理)的完整实战指南,助力开发者快速构建基于比亚迪车辆数据的创新应用。

weixin_29176179的博客 731
上一篇: 就想写个爬虫,我到底要学多少东西啊?
下一篇: 分享 | 会 Python 的人究竟怎么炒股?
codingpy
博客等级 码龄11年 1873粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值