常用API之Python

本文介绍了ROS节点的初始化方法,包括设置节点名称、参数传递与匿名标识。重点讲解了如何使用latch选项、定时器功能以及时间相关操作,如获取当前时间、设置指定时间与创建定时任务。通过实例演示了日志级别控制和节点状态管理技巧。

1. 初始化

rospy.init_node( );

#2.初始化ROS节点;
"""
    作用:ROS节点初始化

    参数:
        name  ----设置节点名称
        argv = None  ----封装节点调用时传递的参数
        anonymous = False ----可以为节点名称生成随机后缀,可以解决重名问题

    使用:
    1.argv使用
    可以安照ROS中指定的语法格式传参,ROS可以解析并加以使用

    2.anonymous使用
    可以设置为True,节点名称可以后缀随机数
    原: rospy.init_node("sanDai")     ----不可以重复执行发布数据的命令
    改: rospy.init_node("sanDai",anonymous = True)   ----可以重复发布
"""

2. 话题与服务相关对象

"""
    内容:latch
        bool 值, 默认是 False
    作用:
        如果设置为 True, 可以将发布的最后一条数据保存,且后续当新的订阅对象连接时,会将该数据发布给订阅者
    使用:
        latch = True
		原:pub = rospy.Publisher("che",String,queue_size=10)
		改:pub = rospy.Publisher("che",String,queue_size=10,latch=True)
"""

注:修改后,发送结束时会保存最后一条数据并通过echo输出

课程:https://www.bilibili.com/video/BV1Ci4y1L7ZZ?p=136&spm_id_from=pageDriver

3. 时刻

#! /usr/bin/env python
import rospy
"""
    需求1: 演示时间相关操作(获取当前时刻 + 设置指定时刻)

    需求2: 程序执行中停顿5秒

    需求3: 获取程序开始执行的时刻, 且已知程序运行的时间,计算程序结束的时刻

    需求4: 创建定时器,实现类似于 ros::Rate 的功能(隔某个时间间隔执行某种操作)
"""
def doMsg(event):                #需求4:定时器需要的内嵌循环
    rospy.loginfo("+++++++++++++++++++++++++++++++++")
    #注:event可以获取时刻
    rospy.loginfo("调用回调函数的时刻:%.2f",event.current_real.to_sec())

if __name__ == "__main__":
    rospy.init_node("hello_time")
    rospy.loginfo("*********************需求1.时间相关操作*********************")
    #需求1: 演示时间相关操作(获取当前时刻 + 设置指定时刻)
    #获取时刻
    right_now = rospy.Time.now() #将当前时刻(1.now函数被调用执行的那一刻 2.1970年01月01日 00:00:00)获取并封装成对象
    rospy.loginfo("当前时刻:%.2f",right_now.to_sec())  #浮点型
    rospy.loginfo("当前时刻:%d",right_now.secs)        #整型
    
    #设置指定
    time1 = rospy.Time(100.5)  #将时间(1970年01月01日 00:00:00 逝去100.5秒)封装进 Time 对象
    time2 = rospy.Time(100.312456875)  
    rospy.loginfo("指定时刻1:%.2f",time1.to_sec())
    rospy.loginfo("指定时刻2:%.2f",time2.to_sec())

    #从某个时间值获取时间对象
    time3 = rospy.Time.from_sec(210.12)
    rospy.loginfo("指定时刻3:%.2f",time3.to_sec())

    rospy.loginfo("*********************需求2.程序执行中停顿*********************")
    # 需求2: 程序执行中停顿5秒
    rospy.loginfo("休眠前-----------------------------------------")
    # 1.封装一个持续时间对象(5秒)
    du = rospy.Duration(5)
    #2.再将持续时间休眠
    rospy.sleep(du)    #执行需求2不注释,需求3需要注释掉,会影响需求3的操作
    rospy.loginfo("休眠后-----------------------------------------")

    rospy.loginfo("*********************需求3.计算程序结束的时刻*****************")
    # 需求3: 获取程序开始执行的时刻, 且已知程序运行的时间,计算程序结束的时刻
    # 1.获取一个时刻 t1
    t1 = rospy.Time.now()
    # 2.设置一个持续时间 du1
    du1 = rospy.Duration(5)
    # 3.结束时刻  t2 = t1 + du1
    t2 = t1 + du1
    rospy.loginfo("开始时刻:%.2f",t1.to_sec())
    rospy.loginfo("结束时刻:%.2f",t2.to_sec())
    
    du2 = du + du1
    rospy.loginfo("持续时间相加:%.2f",du2.to_sec())
    # t2 = right_now + t1  //会抛出异常

    rospy.loginfo("*********************需求4.创建定时器********************")
    # 创建定时器,实现类似于 ros::Rate 的功能(隔某个时间间隔执行某种操作)
    """
        @param period: desired period between callbacks
        @type period: rospy.Duration
        @param callback: callback to be called
        @type callback: function taking rospy.TimerEvent
        @param oneshot: if True, fire only once, otherwise fire continuously until shutdown is called [default: False]
        @type oneshot: bool
        @param reset: if True, timer is reset when rostime moved backward. [default: False]
        @type reset: bool
    """
    #创建一个定时器对象
    timer = rospy.Timer(rospy.Duration(2),doMsg)    #每隔2s输出一次
    # timer = rospy.Timer(rospy.Duration(2),doMsg,True)  #只输出一次,一次性的
    rospy.spin()

输出:
“休眠前”与“休眠后”停顿了5秒
在这里插入图片描述

4. 其他函数

4.1 节点状态判断

def is_shutdown():
    """
    @return: True 如果节点已经被关闭
    @rtype: bool
    """

4.2 节点关闭函数

def signal_shutdown(reason):
    """
    关闭节点
    @param reason: 节点关闭的原因,是一个字符串
    @type  reason: str
    """
def on_shutdown(h):
    """
    节点被关闭时调用的函数
    @param h: 关闭时调用的回调函数,此函数无参
    @type  h: fn()
    """

关闭函数:https://www.bilibili.com/video/BV1Ci4y1L7ZZ?p=141&spm_id_from=pageDriver

4.3 日志函数

#! /usr/bin/env python
import rospy

if __name__ == "__main__":
    #演示日志函数
    rospy.init_node("hello_log")
    rospy.logdebug("DEBUG消息...")
    rospy.loginfo("INFO消息.....")
    rospy.logwarn("WARN消息.....")
    rospy.logerr("ERROR消息.....")
    rospy.logfatal("FATAL消息...")

輸出:
在这里插入图片描述

<think>我们被要求回答关于Python常用模块API文档或使用方法的问题。根据引用内容,我们可以总结出几种查找或生成API文档的方法: 1. 使用`pydoc`命令(引用[1]):在终端中通过`pydoc`命令可以显示模块、函数、类等的文档,类似于man命令。 2. 使用文档生成工具(引用[2]):如Sphinx、MkDocs、pdoc、Pycco等,这些工具可以生成项目的文档。 3. 使用内置函数`dir()`和`help()`(引用[3]):在交互式环境中,可以使用`dir(module)`查看模块的所有属性和方法,然后使用`help(module.attribute)`查看具体帮助。 4. 对于特定模块(如`os`模块和`pywin32`模块),引用[3]和[4]给出了一些基本信息,但更详细的API文档需要查看官方文档或使用上述方法。 因此,我们可以分步骤介绍如何查找和使用Python常用模块的API文档。 ### 步骤1:使用内置帮助系统 Python自带了一个帮助系统,可以在交互式命令行中使用`help()`函数。例如,要查看`os`模块的帮助,可以: ```python import os help(os) ``` 这会显示`os`模块的详细文档,包括函数和类的说明。 ### 步骤2:使用`dir()`函数查看模块成员 如果不确定模块有哪些成员,可以先使用`dir()`函数列出所有属性: ```python import os print(dir(os)) ``` 然后对感兴趣的成员使用`help()`。 ### 步骤3:使用`pydoc`命令 在操作系统的终端(不是Python交互环境)中,可以使用`pydoc`命令。例如: ```bash pydoc os ``` 这将显示`os`模块的文档。也可以启动一个本地HTTP服务器来浏览文档: ```bash pydoc -p 1234 ``` 然后在浏览器中访问`http://localhost:1234/`查看所有已安装模块的文档。 ### 步骤4:使用在线文档 Python的官方文档(https://docs.python.org/)提供了所有标准库模块的详细说明。对于第三方模块,通常可以在PyPI页面或项目的GitHub仓库中找到文档链接。 ### 步骤5:使用文档生成工具 如果你有自己的项目,可以使用Sphinx等工具生成文档。对于已安装的第三方模块,它们通常已经提供了文档,可以通过上述方法查看。 ### 示例:查找`os`模块中`mkdir`函数的使用方法 1. 在Python交互环境中: ```python >>> import os >>> help(os.mkdir) ``` 输出将包括`mkdir`函数的参数说明和功能描述。 2. 在终端中: ```bash pydoc os.mkdir ``` ### 关于第三方模块`pywin32` 对于`pywin32`这样的第三方模块,如果已经安装,同样可以使用`help()`和`pydoc`。此外,由于它是对Windows API的封装,有时可能需要参考Windows API的官方文档来理解更底层的细节。 ### 总结 查找Python模块API文档的方法有多种,可以根据实际情况选择: - 交互式环境:使用`help()`和`dir()` - 终端命令:使用`pydoc` - 在线文档:访问官方文档或项目文档网站 - 文档生成工具:用于生成项目自己的文档 §§相关问题§§ 1. 如何为自定义的Python模块生成API文档? 2. 有哪些优秀的Python模块文档示例? 3. 如何阅读和理解Python官方文档? 4. 对于第三方模块,如何快速找到其官方文档?</think>### Python 常用模块 API 文档与使用方法 以下是查找和使用 Python 常用模块 API 文档的几种高效方法,结合内置工具和第三方资源: #### 1. **使用内置 `help()` 函数** 在 Python 交互环境中直接查看模块/函数的文档: ```python import os # 以 os 模块为例 help(os) # 查看 os 模块全部文档 help(os.mkdir) # 查看 mkdir 函数的具体用法 ``` 输出示例: ```plaintext Help on function mkdir in module os: mkdir(path, mode=0o777, *, dir_fd=None) Create a directory... [参数说明和示例] ``` #### 2. **终端使用 `pydoc` 命令** 在系统终端生成类 Unix man 风格的文档(适用于所有模块)[^1]: ```bash pydoc os # 查看 os 模块文档 pydoc os.path.join # 查看特定函数 pydoc -p 8000 # 启动本地文档服务器(浏览器访问 http://localhost:8000) ``` #### 3. **利用 `dir()` 探索模块成员** 快速列出模块所有属性和方法(结合 `help` 深入查询)[^3]: ```python import sys print(dir(sys)) # 输出 sys 模块全部成员列表 # 结果示例:['__breakpointhook__', '__displayhook__', ... , 'version'] ``` #### 4. **官方在线文档资源** - **标准库文档**: [docs.python.org/3/library](https://docs.python.org/3/library/)(含搜索功能) - **第三方模块**: 在 PyPI 页面查找 "Documentation" 链接(如 [Requests 文档](https://requests.readthedocs.io/)) #### 5. **文档生成工具**(适合项目开发) - **Sphinx**:生成结构化文档(支持 reST/Markdown)[^2] - **pdoc**:自动从代码注释生成 API 文档: ```bash pip install pdoc pdoc numpy # 生成 numpy 模块的 HTML 文档 ``` #### 6. **特定模块文档示例** - **`os` 模块**: 文件操作、路径管理、进程控制等核心功能[^3] ```python os.listdir('.') # 列出当前目录文件 os.path.abspath('test.txt') # 获取绝对路径 ``` - **`pywin32` 模块**(Windows 专用): Windows API/COM 组件/服务管理[^4] ```python import win32api win32api.MessageBox(0, "Hello", "Title") # 弹出消息框 ``` > **提示**:对不熟悉的模块,建议先用 `dir(module)` 和 `help(module)` 快速探索,再查阅官方文档获取完整用例。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值