PyCharm带屏远程部署影响串口接口

问题描述 投票:0回答:1

我有一个烧瓶

app.py
,我正在本地机器上开发。

Flask 应用程序使用连接到远程计算机的串行接口(pyserial)。

我设置 PyCharm 以在远程计算机上进行远程部署。

当我(从本地计算机)远程部署和运行应用程序时,我想在独立的

screen
中启动它,以便在需要时可以断开与 SSH 的连接。

为此,我编写了这个简单的 python 脚本

detach_app.py
:

import sys
import subprocess
import shlex

command = "/opt/homebrew/bin/screen -S flask -d -m " + sys.executable + " app.py"
command = shlex.split(command)
subprocess.Popen(command, start_new_session=True)

在 PyCharm 中时,我远程部署

detach_app.py
它在屏幕中运行
app.py
并分离屏幕。它还将屏幕分配给一个新会话,以便它成为
init
进程的子进程,并且在 python 脚本结束时不会关闭。

这很有效,因为如果我稍后需要检查进程,我只需通过 PyCharm 中的终端 SSH 到机器并执行

screen -r flask

但是,我遇到了一个奇怪的问题,当我通过此方法启动

app.py
时,串行接口行为异常。特别是,设备能够打开串行端口,但它只会发送空字符串。

请注意,如果满足以下条件,则不会发生此行为:

  1. 我远程部署
    app.py
  2. 我在本地自行启动
    app.py
    through screen
  3. 我远程部署
    detach_app.py
    ,但我没有使用
    screen
    ,而是使用
    nohup

看来串行接口问题是由屏幕和PyCharm远程部署的组合引起的。 我知道这是一个牵强的问题,但我真的很难理解接下来要尝试调查该问题的事情是什么。

有人对此有任何指示吗?

python ssh pycharm screen pyserial
1个回答
0
投票

经过更深入的调试,我发现问题只与

pyserial
和MacOS有关,与
screen
无关。

我特别注意到,读取空白 USB 回复的问题是在退出 VNC 连接 1 分钟后发生的。

然后我怀疑操作系统正在进入睡眠状态并出于某种原因停用

tty
,即使我已将其设置为从不进入睡眠状态。

我启动了命令

pmset -g
并注意到这两行

sleep                1 (sleep prevented by screensharingd, powerd)
ttyskeepawake        1

man pmset
有关
ttyskeepawake
和睡眠如何交互的更多详细信息,但如果您注意到,
screensharingd
(VNC) 会阻止操作系统进入睡眠状态。当VNC退出时,它需要一分钟才能进入睡眠状态。

我使用命令修改了设置

sudo pmset -a sleep 0
我目前的完整状态是:

System-wide power settings:
 Currently in use:
 standby              0
 Sleep On Power Button 1
 autorestart          0
 SleepServices        0
 powernap             0
 networkoversleep     0
 disksleep            0
 sleep                0 (sleep prevented by screensharingd, powerd)
 ttyskeepawake        1
 displaysleep         0
 tcpkeepalive         1
 lowpowermode         0
 womp                 1
© www.soinside.com 2019 - 2024. All rights reserved.