LEGO EV3 中执行 VSCode Python 代码过程分析

栏目: Python · 发布时间: 6年前

内容简介:镜像为 ev3dev。通过 SSH 连接 LEGO EV3 设备,默认密码为登录之后,查看设备系统中运行的所有进程,剔除所有的内核进程,用户进程主要包括如下这些:

镜像为 ev3dev。

通过 SSH 连接 LEGO EV3 设备,默认密码为 maker

$ ssh robot@ev3dev.local
Password: 
Linux ev3dev 4.14.61-ev3dev-2.2.2-ev3 #1 PREEMPT Mon Aug 6 14:22:31 CDT 2018 armv5tejl
             _____     _
   _____   _|___ /  __| | _____   __
  / _ \ \ / / |_ \ / _` |/ _ \ \ / /
 |  __/\ V / ___) | (_| | __/\ V /
  \___| \_/ |____/ \__,_|\___| \_/

Debian stretch on LEGO MINDSTORMS EV3!
Last login: Wed Oct 24 07:42:33 2018 from 10.42.0.1

登录之后,查看设备系统中运行的所有进程,剔除所有的内核进程,用户进程主要包括如下这些:

robot@ev3dev:~$ ps -alx
F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
4    0   1   020 0279605632-      Ss   ?          0:10 /sbin/init
4    0 148   120 0396207484-      Ss   ?          0:05 /lib/systemd/systemd-journald
4    0 193   120 0136602692-      Ss   ?          0:03 /lib/systemd/systemd-udevd
4  107 358   120 0 63602964-      Ss   ?          0:01 avahi-daemon: running [ev3dev.local]
4  106 359   120 0 64763268-      Ss   ?          0:02 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
1  107 360 35820 0 63601444-      S    ?          0:00 avahi-daemon: chroot helper
4    0 362   120 0 73404224-      Ss   ?          0:00 /lib/systemd/systemd-logind
4    0 365   120 0171844600-      Ssl  ?          0:04 /usr/sbin/brickd
4 1000 378   120 0337564200poll_s Ssl+ tty5       0:00 /usr/bin/conrun-server
1    0 393   120 0 1768 544-      Ss   ?          0:00 /usr/sbin/ldattach29/dev/tty_ev3-ports:in1
4    0 427   120 0109884588-      Ss   ?          0:03 /usr/sbin/connmand -n
4    0 429   120 0 73443300-      Ss   ?          0:00 /usr/lib/bluetooth/bluetoothd
4  103 510   120 0 81924444-      Ss   ?          0:00 /lib/systemd/systemd-resolved
4    0 512   120 0 99003612-      Ss   ?          0:00 /sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
4    0 514   120 05135611772 -      Ssl+ tty1       0:34 /usr/sbin/brickman
4    0 518   120 0102685188-      Ss   ?          0:00 /usr/sbin/sshd -D
5  105 535   120 0 89723856-      Ssl  ?          0:01 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 105:108
4    0 702 51820 0115245616-      Ss   ?          0:00 sshd: robot [priv]
4 1000 709   120 0 96445564SyS_ep Ss   ?          0:00 /lib/systemd/systemd --user
5 1000 712 70920 0295642540-      S    ?          0:00 (sd-pam)
5 1000 719 70220 0115243680-      R    ?          0:00 sshd: robot@pts/0
0 1000 722 71920 0 52643008wait   Ss   pts/0      0:00 -bash
0 1000 842 72220 0 72002296-      R+   pts/0      0:00 ps -alx

总共有 23 个用户进程。

以 ev3dev 官方提供的在 VSCode 中为 EV3 开发 Python 代码的示例工程 vscode-hello-python 为例,在 VSCode 中以打开目录的方式打开下载的这个工程的源码目录,按下 F5 键在 EV3 中运行代码,此时查看 EV3 中进程的运行情况,所有运行的进程如下:

robot@ev3dev:~$ ps -alx
F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
4    0   1   020 0279605192-      Ss   ?          0:10 /sbin/init
4    0 148   120 0396206604-      Ss   ?          0:05 /lib/systemd/systemd-journald
4    0 193   120 0136602676-      Ss   ?          0:03 /lib/systemd/systemd-udevd
4  107 358   120 0 63602772-      Ss   ?          0:01 avahi-daemon: running [ev3dev.local]
4  106 359   120 0 64763028-      Ss   ?          0:02 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
1  107 360 35820 0 63601332-      S    ?          0:00 avahi-daemon: chroot helper
4    0 362   120 0 73403672-      Ss   ?          0:00 /lib/systemd/systemd-logind
4    0 365   120 0172124444-      Ssl  ?          0:05 /usr/sbin/brickd
4 1000 378   120 0337563896poll_s Ssl  tty5       0:00 /usr/bin/conrun-server
1    0 393   120 0 1768 492-      Ss   ?          0:00 /usr/sbin/ldattach29/dev/tty_ev3-ports:in1
4    0 427   120 0109883592-      Ss   ?          0:03 /usr/sbin/connmand -n
4    0 429   120 0 73443084-      Ss   ?          0:00 /usr/lib/bluetooth/bluetoothd
4  103 510   120 0 81923752-      Ss   ?          0:00 /lib/systemd/systemd-resolved
4    0 512   120 0 99002712-      Ss   ?          0:00 /sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
4    0 514   120 0513568764-      Ssl+ tty1       0:38 /usr/sbin/brickman
4    0 518   120 0102685016-      Ss   ?          0:00 /usr/sbin/sshd -D
5  105 535   120 0 89723256-      Ssl  ?          0:01 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 105:108
4    0 702 51820 0115245616-      Ss   ?          0:00 sshd: robot [priv]
4 1000 709   120 0 96445144SyS_ep Ss   ?          0:00 /lib/systemd/systemd --user
5 1000 712 70920 0295642412-      S    ?          0:00 (sd-pam)
5 1000 719 70220 0115243692-      S    ?          0:04 sshd: robot@pts/0
0 1000 722 71920 0 52643008wait   Ss   pts/0      0:00 -bash
4    0 857 51820 0115245568-      Ss   ?          0:01 sshd: robot [priv]
5 1000 868 85720 0115244800-      S    ?          0:00 sshd: robot@notty
0 1000 870 86820 0 22961448-      Ss   ?          0:00 /usr/lib/openssh/sftp-server
0 1000 872 86820 0341484724poll_s Ssl  ?          0:00 brickrun --directory=/home/robot/vscode-hello-python /home/robot/vscode-hello-python/hello.
0 1000 884 37820 0 91006572poll_s S+   tty5       0:02 python3 /home/robot/vscode-hello-python/hello.py
0 1000 907 72220 0 72002300-      R+   pts/0      0:00 ps -alx

这次总共有 28 个用户进程。此时多了如下 5 个进程:

4    0   857   518  20   0  11524  5568 -      Ss   ?          0:01 sshd: robot [priv]
5 1000   868   857  20   0  11524  4800 -      S    ?          0:00 sshd: robot@notty
0 1000   870   868  20   0   2296  1448 -      Ss   ?          0:00 /usr/lib/openssh/sftp-server
0 1000   872   868  20   0  34148  4724 poll_s Ssl  ?          0:00 brickrun --directory=/home/robot/vscode-hello-python /home/robot/vscode-hello-python/hello.
0 1000   884   378  20   0   9100  6572 poll_s S+   tty5       0:02 python3 /home/robot/vscode-hello-python/hello.py

过程似乎是,在 VSCode 需要将代码灌进 EV3 设备中执行时,EV3 设备的系统中启动了 sftp 服务器 sftp-server 用于传送代码,代码传送完成后执行 brickrun --directory=/home/robot/vscode-hello-python /home/robot/vscode-hello-python/hello.py 命令运行我们的代码。这个 brickrun 进程的父进程是进程 ID 为 868 的 sshd: robot@notty 进程。

brickrun 并没有直接解释执行我们的 Python 代码,而是借助于进程号为 378 的 conrun-server 和 EV3 设备系统中的 Python3 解释器 python3 解释执行我们的代码。

vscode-hello-python 的代码所完成的功能主要是,在设备的屏幕上显示 “Hello World!”,并在终端上显示 “Hello VS Code!”。通过 VSCode 的插件将代码灌进设备并执行,无疑可以正确的完成这些功能。

如果我们用 SSH 登录进设备的系统中之后,直接在终端中执行 Python 代码,就像下面这样:

robot@ev3dev:~$ python3 /home/robot/vscode-hello-python/hello.py
Hello World!
Hello VS Code!

此时,无法看到字符串被显示在 LEGO EV3 设备的屏幕上,两条字符串都被显示在了终端中。

如果我们直接在终端中执行 brickrun 命令,如下面这样:

robot@ev3dev:~$brickrun --directory=/home/robot/vscode-hello-python /home/robot/vscode-hello-python/hello.py
Hello VS Code!

此时代码依然可以如最初预期的那样运行。如果查看 LEGO EV3 设备中进程运行情况的话,可以看到多了如下这两个进程:

0 1000  1046   722  20   0  34148  4616 poll_s Sl+  pts/0      0:00 brickrun --directory=/home/robot/vscode-hello-python /home/robot/vscode-hello-python/hello.py
0 1000  1058   378  20   0  10696  6736 poll_s S+   tty5       0:02 python3 /home/robot/vscode-hello-python/hello.py

brickrun 进程由进程号为 722 号的我们正在运行的 bash 进程创建,Python3 解释器进程依然由进程号为 378 的 conrun-server 进程创建。

搭建 LEGO EV3 的 PyCharm Python 开发环境 一文中,可以看到,用 Python 代码控制马达转动的代码,可以直接在终端中用 Python 解释器如我们预期的那样执行。

这就说明,直接在终端中执行 Python 解释器的 Python 运行环境,和 brickrun / conrun-server 创建的 Python 运行环境是不同的,主要的不同点应该在 Python 标准库中输入输出函数的行为上。

总体上来看,LEGO EV3 中执行 VSCode Python 代码的过程,似乎主要是一个远程代码执行的过程。

LEGO EV3 设备中的 ev3dev 镜像的官方网站为 ev3dev ,ev3dev 镜像中运行的定制的用户进程的代码基本上都是开源的。前面提到的几个命令的源码地址如下:

ev3dev 的 VSCode 插件同样是开源的,其地址为 vscode-ev3dev-browser


以上所述就是小编给大家介绍的《LEGO EV3 中执行 VSCode Python 代码过程分析》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

赛博人

赛博人

[美]约翰·苏勒尔 / 刘淑华、张海会 / 中信出版集团 / 2018-7 / 88.00

随着数字时代的飞速发展,网络空间正在深深影响着我们每个人的思想、感受和网络行为,其对我们的影响甚至比在现实生活中更大。为全面解析人类在网络空间中的感知、感觉、思维以及行为方式,帮助我们应对生活中面临的各种挑战,促进个人成长和改善心理健康,网络心理学专家和学科奠基人约翰·R.苏勒尔,根据20多年在不同网络环境里进行参与-观察式的实地调查所获得的成果,综合运用了行为心理学、认知心理学、人本主义心理学和......一起来看看 《赛博人》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换