首页 > 编程问答 >PyCharm远程部署带屏幕影响串口

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

时间:2024-07-22 13:33:25浏览次数:13  
标签:python ssh pycharm screen pyserial

我有一个 Flask 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远程部署的组合引起的。 我知道这是一个牵强的问题,但我真的很难理解下一步要尝试调查这个问题会是什么。

有人对此有任何指示吗?


这个问题确实很棘手,因为问题似乎出现在 PyCharm 远程部署, screen 和串口通信三者交互时。

以下是一些可能导致此问题的原因以及可以尝试的故障排除步骤:

1. 串口权限问题:

  • screen 会话可能以不同的用户身份运行,该用户没有访问串口的权限。
  • 解决方案: 尝试在 detach_app.py 中使用 os.setuid(0) os.setgid(0) 切换到 root 用户,然后再启动 screen 会话。 注意: 使用 root 用户运行代码存在安全风险,请谨慎操作。

2. TTY 设置问题:

  • screen 默认情况下会更改终端设置,这可能会影响串口通信。
  • 解决方案:
    • 尝试在 screen 命令中添加 -t 选项,以强制分配一个伪终端: python command = "/opt/homebrew/bin/screen -S flask -d -m -t flask " + sys.executable + " app.py"
    • 尝试在 app.py 中使用 pyserial 库打开串口时,指定 xonxoff=False rtscts=False 参数,以禁用流控制。

3. 环境变量问题:

  • PyCharm 远程部署可能会设置一些环境变量,这些变量会影响 screen 会话中的串口通信。
  • 解决方案:
    • 尝试在 detach_app.py 中打印出相关的环境变量,例如 TERM PATH 等,并与直接在远程机器上运行 screen 会话时的环境变量进行比较。
    • 如果发现差异,尝试在 detach_app.py 中设置相应的环境变量。

4. PyCharm 远程部署的特殊设置:

  • PyCharm 远程部署可能有一些特殊设置或行为,影响了串口通信。
  • 解决方案:
    • 尝试使用其他远程部署工具,例如 Fabric Paramiko ,看看问题是否仍然存在。
    • 查阅 PyCharm 的文档或联系 JetBrains 支持,了解有关 PyCharm 远程部署的更多信息。

其他建议:

  • 简化环境: 尝试创建一个最小的示例程序,只包含打开串口并发送数据的代码,以便更容易地隔离问题。
  • 使用日志记录: app.py 中添加详细的日志记录,以便更好地了解程序执行过程以及串口通信的情况。
  • 逐步调试: 尝试逐步调试 detach_app.py app.py ,以查看程序在何处出现问题。

希望这些步骤可以帮助找到问题的根源。 如果仍然遇到问题,请提供更多信息,例如:

  • 的 PyCharm 版本
  • 的操作系统版本
  • pyserial 版本
  • 正在使用的串口设备
  • app.py 代码片段
  • 任何相关的错误消息

这将有助于我更好地理解的问题并提供更具体的帮助。

标签:python,ssh,pycharm,screen,pyserial
From: 78777057

相关文章

  • 无法在 Ubuntu 20.04 中安装 python3-venv,一些损坏的软件包
    这可能很长,但请耐心看完当我在关注这篇文章时尝试安装python3-venvsudoaptinstallbuild-essentiallibssl-devlibffi-devpython3-dev它抛出了以下错误:libffi-devpython3-devReadingpackagelists...DoneBuildingdependencytreeRead......
  • 正则表达式在python爬虫中常用的方法举例
    在爬虫中,正则表达式被广泛用于从网页中提取特定信息。以下是一些常用的正则表达式方法举例,以及它们在爬虫中的典型应用场景:1.提取URLimportreurl_pattern=r'https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+'urls=re.findall(url_pattern,html_content)用于从网页中......
  • 使用 Python XlsxWriter 将 DatePicker 添加到 Excel 单元格中?
    我正在尝试使用PythonXlsxWriter生成的Excel创建输入表单。我想知道是否可以在Excel单元格中添加一个迷你日历(作为DatePicker)供用户输入日期?我偶然发现了Microsoft支持团队提供的本指南插入日期选择器:|||https://support.microsoft.com/en-us/office/......
  • [1037] Python operation of three keys shortcut (pynput)
    Theshortcutof win+shift+leftdoesnotworkwellin pyautogui,butitworkswellin pynput.MovingtheActiveWindowtoaDifferentMonitor: You’reright;PyAutoGUIdoesn’tdirectlysupportmovingwindowsacrossmonitorswiththeeleganceofaswan......
  • [1038] Move the Adobe Acrobat to the left screen if it is in the right screen
    Inpython,itisdifficulttocaptureit.Butwecanuseanotherwaytodothis.Eachtime,whenweopentheAdobeAcrobat,itwillshowsomethinglikethis:Ifitisintheleftscreen,thebluearrowshouldbeinthespecificarea.Sowecanuse pyauto......
  • Python:定期检测断开故障的USB设备并重新初始化实例
    我有一个USB设备,有时会通过USB端口发送串行数据。问题是设备出现故障,有时会无缘无故地断开连接并再次连接到电脑。问题不大,但在这些情况下我需要重新初始化serial.Serial(port)实例,这有点烦人。该设备没有可以从我那里收到的任何命令,我可以验证它是否已连接。我可以......
  • 【校招+社招】华为OD机试 - 拼接URL(Java、JavaScript、Python、C、C++)
    鱼弦:公众号【红尘灯塔】,CSDN博客专家、内容合伙人、新星导师、全栈领域优质创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)算法概述URL拼接(URL拼接)是指将多个URL组件(方案、主机、端口、路径、查询参......
  • 使用 Google Colab 时,Python 包“datasets”从 virtualenv 目录“site-packages”中消
    我正在使用GoogleColab并尝试创建一个虚拟环境来工作。我的代码是:fromgoogle.colabimportdrivedrive.mount('/content/drive')!pipinstallvirtualenvmyenv_dir='/content/drive/MyDrive/virtual_env/'!virtualenv{myenv_dir}!chmod+x{myen......
  • Python 3 - openpyxl - 按名称迭代列
    使用openpyxl不按数字而是按列标题(ws第一行中的字符串值)迭代列的最简单方法是什么:如下所示:forcellinws.columns['revenue']:print(cell.value)不幸的是,openpyxl不直接支持像ws.columns['revenue']这样按列标题进行迭代。openpyxl......
  • Python selenium 网络抓取 recaptcha
    我想抓取一个网站,但在此之前有一个验证码,我什至使用api获取了数据,并且我还将其注入到网站中,因为网页没有提交按钮,我无法提交。流程是这样的,如果我解决同一网址中的验证码,隐藏的内容将被显示。但它并没有得到解决。我到处都找过了。我找不到解决方案。谁能帮我解决这个问题?......