活动介绍
file-type

Crun: 将系统命令映射为带参数的Node.js函数模块

ZIP文件

下载需积分: 9 | 5KB | 更新于2025-08-10 | 117 浏览量 | 0 下载量 举报 收藏
download 立即下载
### 知识点详解 #### 1. Node.js模块简介 Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许开发者使用JavaScript语言编写服务器端应用程序。Node.js模块是Node.js应用程序的基础构建块,可以被组织、复用和共享。常见的Node.js模块包括http模块、fs模块、express框架等。 #### 2. crun模块介绍 crun是一个专为Node.js设计的模块,它允许开发者将系统命令映射到JavaScript函数上,使得对系统命令的调用更加方便和可重用。通过该模块,可以将命令行指令封装成JavaScript函数,并通过参数的形式动态传递执行。 #### 3. 使用系统命令映射到带参数的函数的优势 在脚本或应用程序中重用系统命令可以带来以下好处: - **提高开发效率**:无需每次调用系统命令时都编写完整的命令字符串。 - **动态参数化**:通过函数参数动态地插入命令中的占位符,实现参数化调用。 - **增强可读性和可维护性**:通过定义函数,使代码更加模块化,更易于理解和维护。 #### 4. crun模块的安装与使用 安装crun模块非常简单,可以通过npm(Node.js的包管理器)进行安装: ```bash npm install crun ``` 安装完成后,可以通过require语句引入模块到Node.js脚本中: ```javascript var crun = require('crun'); ``` 之后可以定义一系列命令及其对应的系统命令字符串,并调用`crun.generate`方法来执行它们。 #### 5. crun模块的API使用示例 在给定的示例中,定义了三个系统命令(ls、cp、tail): ```javascript var commands = { ls: 'ls -al', cp: 'cp -Rf #{src} #{dst}', tail: 'tail -f #{log}' }; ``` 这里的`#{src}`, `#{dst}`, `#{log}`是占位符,它们在执行时会被`crun.generate`方法中的参数所替换。 通过调用`crun.generate`方法,可以生成对应的函数,然后可以直接调用这些函数,并传入相应的参数: ```javascript crun.generate('test', commands); ``` 如果调用命令时不提供回调函数,`crun.generate`会返回一个ChildProcess对象,该对象代表了正在执行的子进程。如果提供了回调函数,则命令执行的结果将通过回调函数处理。 #### 6. 参数替换机制 在crun模块中,可以使用`#{...}`符号来指定命令字符串中的参数占位符。这些占位符会在命令执行前被实际的参数值所替换。这样的设计使得同一系统命令可以在不同的场景下通过更改参数而被重用。 #### 7. ChildProcess对象 Node.js中的ChildProcess对象用于表示子进程。它是由`child_process`模块的`spawn`、`exec`、`execFile`或`fork`方法创建的实例。ChildProcess对象提供了许多用于与子进程通信和控制子进程的方法和事件,例如: - `stdout`和`stderr`:用于读取子进程的标准输出和标准错误流。 - `stdin`:用于向子进程的标准输入流写入数据。 - `kill`方法:用于结束子进程。 - `on('exit', callback)`:监听子进程退出事件。 #### 8. JavaScript中的回调函数 回调函数是Node.js异步编程的核心概念之一。在Node.js中,许多API都是非阻塞的,意味着它们在执行完毕后不会立即返回结果。取而代之,你需要提供一个函数来处理API执行完成时的结果或错误。这个函数即为回调函数。Node.js的许多模块和方法都会接受一个回调函数作为其最后一个参数。 #### 9. 模块标签 在本示例中,模块被标记为“JavaScript”。标签通常用于分类和识别模块的功能和用途。由于JavaScript是Node.js的基础语言,因此当使用JavaScript编写Node.js模块时,它通常会作为默认或最常见的标签。 #### 10. 压缩包子文件的文件名称列表 压缩包子文件通常指的是将文件或文件夹打包成一个压缩文件,便于传输或存档。本示例中,压缩包子文件的文件名称列表为“crun-master”,这可能意味着crun模块的源代码存储在某个版本控制系统(如Git)的master分支,并被打包成一个名为“crun-master”的压缩包。在实际使用中,开发者可能需要下载该压缩包进行安装和使用。

相关推荐

filetype

wjs@wjs-desktop:~/Drone_Slam$ ros2 launch fishbot_grapher test_grapher_6.launch.py [INFO] [launch]: All log files can be found below /home/wjs/.ros/log/2025-08-01-00-35-21-205680-wjs-desktop-2879 [INFO] [launch]: Default logging verbosity is set to INFO [INFO] [sllidar_node-1]: process started with pid [2882] [INFO] [ahrs_driver_node-2]: process started with pid [2884] [INFO] [static_transform_publisher-3]: process started with pid [2886] [INFO] [robot_state_publisher-4]: process started with pid [2888] [INFO] [cartographer_node-5]: process started with pid [2890] [INFO] [cartographer_occupancy_grid_node-6]: process started with pid [2894] [INFO] [test01-7]: process started with pid [2902] [static_transform_publisher-3] [WARN] [1753979721.537040397] []: Old-style arguments are deprecated; see --help for new-style arguments [sllidar_node-1] [INFO] [1753979721.758057445] [sllidar_node]: SLLidar running on ROS2 package SLLidar.ROS2 SDK Version:1.0.1, SLLIDAR SDK Version:2.0.0 [sllidar_node-1] [INFO] [1753979721.806444401] [sllidar_node]: SLLidar S/N: 7885EC95C1EA9ED1B2E49CF4FB594571 [sllidar_node-1] [INFO] [1753979721.806628793] [sllidar_node]: Firmware Ver: 1.01 [sllidar_node-1] [INFO] [1753979721.806682875] [sllidar_node]: Hardware Rev: 18 [sllidar_node-1] [INFO] [1753979721.858743833] [sllidar_node]: SLLidar health status : 0 [sllidar_node-1] [INFO] [1753979721.858900064] [sllidar_node]: SLLidar health status : OK. [sllidar_node-1] [INFO] [1753979722.089228500] [sllidar_node]: current scan mode: DenseBoost, sample rate: 32 Khz, max_distance: 18.0 m, scan frequency:10.0 Hz, [cartographer_node-5] [INFO] [1753979722.285159294] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/home/wjs/Drone_Slam/install/fishbot_grapher/share/fishbot_grapher/config/fishbot_2d.lua' for 'fishbot_2d.lua'. [cartographer_node-5] [INFO] [1753979722.316376894] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/map_builder.lua' for 'map_builder.lua'. [cartographer_node-5] [INFO] [1753979722.316734830] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/map_builder.lua' for 'map_builder.lua'. [cartographer_node-5] [INFO] [1753979722.317209060] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/pose_graph.lua' for 'pose_graph.lua'. [cartographer_node-5] [INFO] [1753979722.317477826] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/pose_graph.lua' for 'pose_graph.lua'. [cartographer_node-5] [INFO] [1753979722.318294347] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder.lua' for 'trajectory_builder.lua'. [cartographer_node-5] [INFO] [1753979722.318567575] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder.lua' for 'trajectory_builder.lua'. [cartographer_node-5] [INFO] [1753979722.335346971] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_2d.lua' for 'trajectory_builder_2d.lua'. [cartographer_node-5] [INFO] [1753979722.335619015] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_2d.lua' for 'trajectory_builder_2d.lua'. [cartographer_node-5] [INFO] [1753979722.336400726] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_3d.lua' for 'trajectory_builder_3d.lua'. [cartographer_node-5] [INFO] [1753979722.336697858] [cartographer logger]: I0801 00:35:22.000000 2890 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_3d.lua' for 'trajectory_builder_3d.lua'. [static_transform_publisher-3] [INFO] [1753979722.387448415] [imu_tf_publisher]: Spinning until stopped - publishing transform [static_transform_publisher-3] translation: ('0.000000', '0.000000', '0.000000') [static_transform_publisher-3] rotation: ('0.000000', '0.000000', '0.000000', '1.000000') [static_transform_publisher-3] from 'base_link' to 'imu_link' [ahrs_driver_node-2] [INFO] [1753979722.599184780] [ahrs_bringup]: Serial Port initialized [ahrs_driver_node-2] [INFO] [1753979722.599712426] [ahrs_bringup]: ahrsBringup::processLoop: start [ahrs_driver_node-2] terminate called after throwing an instance of 'serial::SerialException' [ahrs_driver_node-2] what(): SerialException device reports readiness to read but returned no data (device disconnected?) failed. [robot_state_publisher-4] [INFO] [1753979722.692730637] [robot_state_publisher]: got segment base_link [robot_state_publisher-4] [INFO] [1753979722.693155486] [robot_state_publisher]: got segment imu_link [robot_state_publisher-4] [INFO] [1753979722.693285778] [robot_state_publisher]: got segment laser_link [cartographer_node-5] [INFO] [1753979722.875068815] [cartographer logger]: I0801 00:35:22.000000 2890 map_builder_bridge.cpp:136] Added trajectory with ID '0'. [ERROR] [ahrs_driver_node-2]: process has died [pid 2884, exit code -6, cmd '/home/wjs/Drone_Slam/install/fdilink_ahrs/lib/fdilink_ahrs/ahrs_driver_node --ros-args --params-file /tmp/launch_params_ccuxsgpz']. [cartographer_node-5] [INFO] [1753979723.981995571] [cartographer logger]: I0801 00:35:23.000000 2890 ordered_multi_queue.cc:172] All sensor data for trajectory 0 is available starting at '638895765239747368'. [cartographer_node-5] [INFO] [1753979723.982265376] [cartographer logger]: I0801 00:35:23.000000 2890 local_trajectory_builder_2d.cc:135] Extrapolator is still initializing. [cartographer_node-5] [INFO] [1753979724.080317557] [cartographer logger]: I0801 00:35:24.000000 2890 pose_graph_2d.cc:148] Inserted submap (0, 0). [cartographer_node-5] [WARN] [1753979724.286147835] [cartographer logger]: W0801 00:35:24.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [test01-7] Traceback (most recent call last): [test01-7] File "/home/wjs/.local/lib/python3.10/site-packages/serial/serialposix.py", line 322, in open [test01-7] self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK) [test01-7] FileNotFoundError: [Errno 2] No such file or directory: '/dev/esp' [test01-7] [test01-7] During handling of the above exception, another exception occurred: [test01-7] [test01-7] Traceback (most recent call last): [test01-7] File "/home/wjs/Drone_Slam/install/fishbot_grapher/lib/fishbot_grapher/test01", line 33, in <module> [test01-7] sys.exit(load_entry_point('fishbot-grapher==0.0.0', 'console_scripts', 'test01')()) [test01-7] File "/home/wjs/Drone_Slam/install/fishbot_grapher/lib/python3.10/site-packages/fishbot_grapher/test01.py", line 101, in main [test01-7] tf_subscriber = TFSubscriber() [test01-7] File "/home/wjs/Drone_Slam/install/fishbot_grapher/lib/python3.10/site-packages/fishbot_grapher/test01.py", line 20, in __init__ [test01-7] self.ser = serial.Serial("/dev/esp", 115200) [test01-7] File "/home/wjs/.local/lib/python3.10/site-packages/serial/serialutil.py", line 244, in __init__ [test01-7] self.open() [test01-7] File "/home/wjs/.local/lib/python3.10/site-packages/serial/serialposix.py", line 325, in open [test01-7] raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg)) [test01-7] serial.serialutil.SerialException: [Errno 2] could not open port /dev/esp: [Errno 2] No such file or directory: '/dev/esp' [cartographer_node-5] [WARN] [1753979724.491526002] [cartographer logger]: W0801 00:35:24.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979724.709295995] [cartographer logger]: W0801 00:35:24.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [ERROR] [test01-7]: process has died [pid 2902, exit code 1, cmd '/home/wjs/Drone_Slam/install/fishbot_grapher/lib/fishbot_grapher/test01 --ros-args']. [cartographer_node-5] [WARN] [1753979724.926728636] [cartographer logger]: W0801 00:35:24.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979725.135525279] [cartographer logger]: W0801 00:35:25.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979725.355498538] [cartographer logger]: W0801 00:35:25.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979725.575934667] [cartographer logger]: W0801 00:35:25.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979725.791681973] [cartographer logger]: W0801 00:35:25.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979725.792889539] [cartographer logger]: W0801 00:35:25.000000 2890 range_data_collator.cc:82] Dropped 154 earlier points. [cartographer_node-5] [WARN] [1753979726.009195591] [cartographer logger]: W0801 00:35:26.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979726.010459952] [cartographer logger]: W0801 00:35:26.000000 2890 range_data_collator.cc:82] Dropped 532 earlier points. [cartographer_node-5] [WARN] [1753979726.220309676] [cartographer logger]: W0801 00:35:26.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979726.437783320] [cartographer logger]: W0801 00:35:26.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979726.439136426] [cartographer logger]: W0801 00:35:26.000000 2890 range_data_collator.cc:82] Dropped 542 earlier points. [cartographer_node-5] [WARN] [1753979726.649371795] [cartographer logger]: W0801 00:35:26.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979726.857038597] [cartographer logger]: W0801 00:35:26.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [WARN] [1753979727.064830761] [cartographer logger]: W0801 00:35:27.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. ^C[WARNING] [launch]: user interrupted with ctrl-c (SIGINT) [robot_state_publisher-4] [INFO] [1753979727.252864090] [rclcpp]: signal_handler(signum=2) [static_transform_publisher-3] [INFO] [1753979727.252895586] [rclcpp]: signal_handler(signum=2) [cartographer_occupancy_grid_node-6] [INFO] [1753979727.252922415] [rclcpp]: signal_handler(signum=2) [cartographer_node-5] [INFO] [1753979727.254331207] [rclcpp]: signal_handler(signum=2) [cartographer_node-5] [WARN] [1753979727.278186754] [cartographer logger]: W0801 00:35:27.000000 2890 tf_bridge.cpp:53] "odom" passed to lookupTransform argument source_frame does not exist. [cartographer_node-5] [INFO] [1753979727.299298707] [cartographer logger]: I0801 00:35:27.000000 2890 node.cpp:569] Shutdown the subscriber of [scan] [cartographer_node-5] [INFO] [1753979727.299538745] [cartographer logger]: I0801 00:35:27.000000 2890 map_builder_bridge.cpp:152] Finishing trajectory with ID '0'... [cartographer_node-5] [WARN] [1753979727.299999084] [cartographer logger]: W0801 00:35:27.000000 2890 node.cpp:773] Can't run final optimization if there are one or more active trajectories. Trying to finish trajectory with ID 0 now. [cartographer_node-5] [INFO] [1753979727.300107494] [cartographer logger]: I0801 00:35:27.000000 2890 node.cpp:551] Trajectory 0 already pending to finish. [cartographer_node-5] [INFO] [1753979727.300154006] [cartographer logger]: I0801 00:35:27.000000 2890 map_builder_bridge.cpp:161] Running final trajectory optimization... [cartographer_node-5] [INFO] [1753979727.300265082] [cartographer logger]: I0801 00:35:27.000000 2953 pose_graph_2d.cc:538] Remaining work items in queue: 0 [cartographer_node-5] [INFO] [1753979727.300400284] [cartographer logger]: I0801 00:35:27.000000 2953 constraint_builder_2d.cc:290] 0 computations resulted in 0 additional constraints. [cartographer_node-5] [INFO] [1753979727.300446870] [cartographer logger]: I0801 00:35:27.000000 2953 constraint_builder_2d.cc:292] Score histogram: [cartographer_node-5] Count: 0 [cartographer_node-5] [WARN] [1753979727.308865144] [cartographer logger]: W0801 00:35:27.000000 2953 preprocessor.cc:62] Specified options.num_threads: 7 exceeds maximum available from the threading model Ceres was compiled with: 4. Bounding to maximum number available. [cartographer_node-5] [INFO] [1753979727.321944840] [cartographer logger]: I0801 00:35:27.000000 2953 pose_graph_2d.cc:538] Remaining work items in queue: 1 [cartographer_node-5] [INFO] [1753979727.322111019] [cartographer logger]: I0801 00:35:27.000000 2953 constraint_builder_2d.cc:290] 0 computations resulted in 0 additional constraints. [cartographer_node-5] [INFO] [1753979727.322155142] [cartographer logger]: I0801 00:35:27.000000 2953 constraint_builder_2d.cc:292] Score histogram: [cartographer_node-5] Count: 0 [cartographer_node-5] [WARN] [1753979727.323773588] [cartographer logger]: W0801 00:35:27.000000 2953 preprocessor.cc:62] Specified options.num_threads: 7 exceeds maximum available from the threading model Ceres was compiled with: 4. Bounding to maximum number available. [cartographer_node-5] [INFO] [1753979727.356344069] [cartographer logger]: I0801 00:35:27.000000 2954 constraint_builder_2d.cc:290] 0 computations resulted in 0 additional constraints. [cartographer_node-5] [INFO] [1753979727.356515895] [cartographer logger]: I0801 00:35:27.000000 2954 constraint_builder_2d.cc:292] Score histogram: [cartographer_node-5] Count: 0 Optimizing: Done. [cartographer_node-5] [INFO] [1753979727.441603445] [cartographer logger]: I0801 00:35:27.000000 2952 constraint_builder_2d.cc:290] 0 computations resulted in 0 additional constraints. [cartographer_node-5] [INFO] [1753979727.441713595] [cartographer logger]: I0801 00:35:27.000000 2952 constraint_builder_2d.cc:292] Score histogram: [cartographer_node-5] Count: 0 Optimizing: Done. [INFO] [static_transform_publisher-3]: process has finished cleanly [pid 2886] [INFO] [cartographer_occupancy_grid_node-6]: process has finished cleanly [pid 2894] [INFO] [robot_state_publisher-4]: process has finished cleanly [pid 2888] [INFO] [cartographer_node-5]: process has finished cleanly [pid 2890] [sllidar_node-1] [INFO] [1753979727.674903693] [sllidar_node]: Stop motor [INFO] [sllidar_node-1]: process has finished cleanly [pid 2882] wjs@wjs-desktop:~/Drone_Slam$

蓝精神
  • 粉丝: 45
上传资源 快速赚钱