{"id":15579866,"url":"https://github.com/neutree/comtool","last_synced_at":"2025-05-13T20:15:02.691Z","repository":{"id":38454777,"uuid":"97839413","full_name":"Neutree/COMTool","owner":"Neutree","description":"Cross platform communicate assistant(Serial/network/terminal tool)（ 跨平台 串口调试助手 网络调试助手 终端工具 linux windows mac Raspberry Pi ）支持插件和二次开发","archived":false,"fork":false,"pushed_at":"2025-02-12T08:28:47.000Z","size":1635,"stargazers_count":2070,"open_issues_count":55,"forks_count":361,"subscribers_count":38,"default_branch":"master","last_synced_at":"2025-04-28T13:58:42.724Z","etag":null,"topics":["assistant","debug","network","plugin","protocol","python","serial","tcp","terminal","tool","udp"],"latest_commit_sha":null,"homepage":"https://neucrack.com/p/186","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Neutree.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-07-20T13:36:11.000Z","updated_at":"2025-04-28T00:17:00.000Z","dependencies_parsed_at":"2023-01-30T17:02:05.813Z","dependency_job_id":"9c57ff09-beab-4144-9f87-a8c1ef28e8fb","html_url":"https://github.com/Neutree/COMTool","commit_stats":{"total_commits":356,"total_committers":13,"mean_commits":"27.384615384615383","dds":0.0702247191011236,"last_synced_commit":"2a958d8e4c440043867e22e3940d4e1ccf2858cb"},"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Neutree%2FCOMTool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Neutree%2FCOMTool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Neutree%2FCOMTool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Neutree%2FCOMTool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Neutree","download_url":"https://codeload.github.com/Neutree/COMTool/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254020638,"owners_count":22000755,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["assistant","debug","network","plugin","protocol","python","serial","tcp","terminal","tool","udp"],"created_at":"2024-10-02T19:21:31.009Z","updated_at":"2025-05-13T20:15:02.667Z","avatar_url":"https://github.com/Neutree.png","language":"Python","readme":"COMTool\n========\n\nEnglish | [中文](./README_ZH.MD)\n\n ![GitHub](https://img.shields.io/github/license/neutree/comtool) [![PyPI](https://img.shields.io/pypi/v/comtool.svg)](https://pypi.python.org/pypi/comtool/) ![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/neutree/comtool/pack.yml?branch=master) ![GitHub repo size](https://img.shields.io/github/repo-size/neutree/comtool) ![GitHub Repo stars](https://img.shields.io/github/stars/neutree/comtool?style=social)\n\n [![GitHub all releases](https://img.shields.io/github/downloads/neutree/comtool/total?label=release%20downloads)](https://github.com/Neutree/COMTool/releases) [![PyPI - Downloads](https://img.shields.io/pypi/dm/comtool?label=pypi%20downloads)](https://pypi.org/project/COMTool/) [![SourceForge](https://img.shields.io/sourceforge/dt/comtool?label=sourceforge%20downloads)](https://sourceforge.net/projects/comtool)\n\n\nA cross platform serial debug tools written by python\n\n--------\n\n| Windows | Linux | Raspberry Pi | macOS |\n| ------- | ----- | ------------ | ----- |\n| ![comtool Windows screenshot](./COMTool/assets/screenshot_v2_white.png) | ![comtool linux screenshot](./COMTool/assets/screenshot_V1.4_night.png) | ![comtool Raspberry Pi screenshot](./COMTool/assets/RaspberryPiScreenshot.png) | ![](./COMTool/assets/screenshot_macos.jpg) |\n\n\n| White theme | Dark theme | protocol plugin | TCP/UDP | Terminal | Graph |\n| ----------- | ---------- | --------------- | ------- | -------- | ----- |\n| ![comtool white theme](./COMTool/assets/screenshot_v2_white.png) | ![comtool dark theme](./COMTool/assets/screenshot_v2.png) | ![comtool protocol plugin](./COMTool/assets/screenshot_protocol_v2.3.png) | ![tcp udp plugin](./COMTool/assets/tcp_udp.png) | ![terminal](./COMTool/assets/screenshot_terminal.png) | ![plugin graph](./COMTool/assets/screenshot_graph.png) |\n\n\n\n\n\n\n\u003e screenshot maybe the old version, the latest may not the same totally! But better performance、more easy to use and more elegant\n\n## Features\n\n- [x] cross platform (Windows, Linux, macOS, Raspberry Pi)(code with python, only if your platform support python)\n- [x] reliable stability, no UI freeze\n- [x] multiple language support\n- [x] configs save and auto load(auto save settings when exit)\n- [x] multiple character encode support(`ASII,GBK(Chinese),UTF-8,UTF-16` etc.)\n- [x] multiple language support\n- [x] multiple connection type support, and support add connection plugin\n  - [x] serial port\n    - [x] serial auto detect, and remember last selected support\n    - [x] serial offline auto reconnect support\n    - [x] port baudrate(any value) bytesize parity stopbits flow control etc. settings\n    - [x] rts \u0026 dtr control by hand\n  - [x] TCP/UDP support, include client and server mode\n  - [x] SSH client support\n- [x] plugin support(Create plugin see [docs/plugins.md](./docs/plugins.md)), built-in plugin:\n  - [x] dbg plugin, support basic send receive debug operation\n    - [x] basic send/receive data (ascii and hex)\n    - [x] send and receive data count\n    - [x] clear received data area\n    - [x] auto linefeed\n    - [x] scheduled auto send\n    - [x] send history and select send again\n    - [x] custom most usage data items and one click to send\n    - [x] CR LF(\\r\\n) or LF(\\n)  support\n    - [x] key shortcuts like \u003ckbd\u003eCtrl+Enter\u003c/kbd\u003e to send etc. More see help\n    - [x] receive and send record support add timestamp and save log to file\n    - [x] send file\n    - [x] unix terminal style color support(e.g.`\\x1b[33;42mhello\\x1b[0mhello2`)\n    - [x] escape character support, like `\\r \\n \\t \\x` etc.\n  - [x] protocol plugin, customize your own protocol\n    - [x] customize encoding and decoding method\n    - [x] customize shortcut key\n    - [x] escape character support, like `\\r \\n \\t \\x` etc.\n  - [x] terminal plugin, basic terminal interaction\n  - [x] graph plugin\n    - [x] support dynamicly add graph widgets, add graph widgets you need\n    - [x] display line chart in realtime, support customize protocol header(support escape characters)\n    - [x] customable button to send data, support shortcut key\n\n## Installation\n\nThere are two ways to install COMTool:\n\n* [Download binary files and run](#Install-binary) : For Windows or macOS, and simple usage users\n* [Install as python package(source code)](#Install-python-package) : For Linux, or need to use plugins' user, or users who know about python\n\n## Install binary\n\n### Windows\n\n* Download the latest bin file at the [release page](https://github.com/Neutree/COMTool/releases) or [sourceforge](https://sourceforge.net/projects/comtool/files/)\n* Unzip `.zip` file, and click `comtool.exe` to run\n\u003e And you can install by scoop, maintained by [StudentWeis](https://github.com/Neutree/COMTool/issues/50)\n\u003e ```\n\u003e scoop bucket add Nightly https://github.com/StudentWeis/Nightly\n\u003e scoop install comtool\n\u003e ```\n\n### Linux\n\nLinux has too much version, so we only compile binary for ubuntu.\nOther distribution please [install from pypi or source code](#Install-python-package).\nIf you have any idea to pack cross platform binary like flatpak or appimage, you can contribute a pull request or add an issue to tell me how to\n\n\u003e Arch Linux and its derivative distributions can install from AUR(maintained by [taotieren](https://github.com/Neutree/COMTool/issues/44))：\n\u003e ```bash\n\u003e # Release version\n\u003e yay -S python-comtool\n\u003e # Development version\n\u003e yay -S python-comtool-git\n\u003e ```\n\n* Download release at [release](https://github.com/Neutree/COMTool/releases) page, and extract files from `.zip` file, and click `comtool` to run\n\n* Add current user to dialout group to avoid `sudo` command\n```shell\nsudo usermod -a -G dialout $USER\ngrep 'dialout' /etc/group\nreboot #must reboot to take effect\n```\n\n### Rasberry Pi\n\n\nOpen terminal, install dependencies with package manager:\n\n```shell\nsudo apt install git python3-pyqt5 python3-numpy\n```\n\n\u003e Use package manager to install pyqt5 numpy etc. This way makes install easier.\n\u003e If you meet some error when install with `pip`, you can try to install with package manager first.\n\u003e To find the package name, the trick is to use `sudo apt-cache search package_name | grep package_name` to search package name, then install it.\n\n\nThen install other packages with `pip`:\n```\ngit clone https://github.com/Neutree/COMTool.git --depth=1\ncd COMTool\npip3 install . --verbose\n# 或者\n# python setup.py bdist_wheel\n# sudo pip3 install dist/COMTool-*.*.*-py3-none-any.whl --verbose\n```\n\n* Add current user to dialout group to avoid `sudo` command\n```shell\nsudo usermod -a -G dialout $USER\ngrep 'dialout' /etc/group\nreboot #must reboot to take effect\n```\n\nthen enjoy by command\n```\ncomtool\n```\n\n### macOS\n\n* Download release at [release](https://github.com/Neutree/COMTool/releases) page or [sourceforge](https://sourceforge.net/projects/comtool/files/)\n* Install dmg package\n\nIf you want to open multiple comtool, just right click dock icon, then click `New Window`.\n\nor you can open terminal and type\n```\nopen -n /Application/comtool.app\n```\nor\n```\ncd /Applicatioin/comtool.app/Contents/MacOS\n./comtool\n```\n\n\u003e Because the program is not signed by the developer, it will warn when you open it for the first time. You need to go to `Settings -\u003e Security and Privacy -\u003e General` to see the prompt `comtool` and click `Open anyway`.\n\n## Windows defender shows comtool binary is malware?\n\nIf your program is download from [here](https://github.com/Neutree/COMTool/releases), it's ok, the error caused by [pack issue](https://github.com/pyinstaller/pyinstaller/issues/4852), all the source code and pack script is here, even the pack progress is totally automated with github action, no one manually pack.\n\nIf you remain have concern, just download source code to run with python or pack yourself.\n\nOf course, if you find a better pack way, please open issue to tell us.\n\n\n## Install python package\n\nFor developers or the binary not support your platform's, use this way to install\n\n* Install Python3 first\n  * If windows or macOS: [dowload python3](https://www.python.org/downloads/)\n  * If linux: ubuntu for example `sudo apt install python3 python3-pip`, macOS `brew install python3 python3-pip`\n\n* Ensure you have `pip`\n```shell\npip3 --version\n# or\npip --version\n```\n\nIf no this command, install by\n```shell\npython3 -m ensurepip\n```\n\n* Then install from pypi:\n```shell\npip3 install comtool\ncomtool\n```\n\nfor Chinese, you can use tuna mirrors to download faster by:\n```shell\npip install -i https://pypi.tuna.tsinghua.edu.cn/simple comtool\n```\n\n* Or you can directly install from github\n```\npip3 install git+https://github.com/Neutree/COMTool\n```\n\n* Or you can download source code, then install from source code\n  * download source code, download [in web page](https://github.com/Neutree/COMTool) or `git clone https://github.com/Neutree/COMTool.git`\n  * install\n```\ncd COMTool\npip install .\n```\nor build your own wheel binary\n```\npip3 install wheel\npython setup.py bdist_wheel\npip install dist/COMTool-*.*.*-py3-none-any.whl\ncomtool\n```\n\n* If encounter error when install with `pip`, you can try to install with package manager first, then install with `pip` again. e.g.\n```\nsudo apt install python3-pyqt5 python3-numpy cython3\n```\n\u003e To find the package name, the trick is to use `sudo apt-cache search package_name | grep package_name` to search package name, then install it.\n\n* By the way, you should add current user to dialout group to avoid `sudo` command\n```shell\nsudo usermod -a -G dialout $USER\ngrep 'dialout' /etc/group\nreboot #must reboot to take effect\n```\n\n## Manually add app to start menu on Linux\n\n* Copy [tool/comtool.desktop](tool/comtool.desktop) to `/usr/share/applications` folder(may need `root` user to do this)\n* Edit `/usr/share/applications/comtool.desktop`, change icon path `Icon=/usr/local/COMTool/assets/logo.ico` to actual [icon](COMTool/assets/logo.ico) path, you can also use your love icon\n* Then you can find comtool app in start menu(or app center)\n\n## Pack binary\n\n\n```shell\npip3 install pyinstaller\npython pack.py\ncd dist\nls\n```\n\n\u003e It's better to create a virtual environment before pack to decrease the size of binary\n\u003e `pip install virtualenv`\n\u003e `virtualenv venv`\n\u003e `source venv/bin/activate` # linux\n\u003e `venv/Scripts/activate` # windows\n\u003e If you encounter `running scripts is disabled on this system`, you can temporarily allow the current terminal to execute scripts `Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned`\n\u003e Then `pip install pyinstaller` and `python pack.py`\n\n\n## Development\n\n1. Install python(\u003e=3.8) and pip3\n\nLinux:\n```\nsudo apt install python3 python3-pip\n```\n\nWindows: \n  [dowload python3](https://www.python.org/downloads/)\n\n2. install packages like `pyserial` and `PyQt5` etc.(list in [requirements.txt](requirements.txt))\n```\ncd COMTool\npip3 install -r requirements.txt\n```\n\nOn Raspberry, `python3-pyqt5` can be install by `apt` command:\n```\nsudo pip3 install --upgrade pyserial\nsudo apt install python3-pyqt5\n```\n\n3. clone project\n```\ngit clone https://github.com/Neutree/COMTool.git\n```\n\n4. code, resolve bugs or add new reatures\n\nRecommended `PyCharm` IDE or `vscode` to get start\n\nHow to run:\nGenerate translate binary files first(`.mo`)\n\n```\npython COMTool/i18n.py finish\n```\n\nThen execute main program\n\n```\npython COMTool/Main.py\n```\n\n5. pull request\n\n## Write your own plugins in minutes\n\nsee [docs/plugins.md](./docs/plugins.md)\n\n\n## Add translate\n\n* Install environment first(python pip packages in the requirments.txt)\n```shell\napt install python3 python3-pip\npip3 install -r requirements.txt\n```\n\n* If you need to add a new lanuage, or skip\n\nAdd locale in [i18n.py](./COMTool/i18n.py)\n```\nlocales=[\"en\", \"zh_CN\", \"zh_TW\", \"ja\"]\n```\nappend your language to this list, locales can be found [here](https://www.science.co.il/language/Locale-codes.php) or [wikipedia](https://en.wikipedia.org/wiki/Language_localisation), `zh_CN` for example means China Mainland, corresponding language is simplified Chinese characters, `zh_TW` means China Taiwan, and language is traditional Chinese characters, you can also only use `zh` to use simplified Chinese characters.\n\n* Generate translate files\n\n```shell\npython i18n.py prepare\n```\n\nThis command will generate `.po` files in locales folder\n\n* Translate mannually\n\nThen translate `.po` files, this is a standard translate file format which named `gettext`\n\n* Generate binary translate files\n\nto make program read faster, the text files `.po` should be convert to binary file `.mo`, just run command:\n```shell\npython i18n.py finish\n```\nand then you can see `locales/\u003clocale\u003e/LC_MESSAGES/messages.mo` file\n\n* Test\n\nRun application, you will see the new translation\n\n* Pull request\n\nCreate a PR to merge your changes to [this repo](https://github.com/Neutree/COMTool)\n\n## Customize theme\n\nIn the `assets/qss` directory under the source code or binary program directory, copy a file from `style-dark.qss` or `style-light.qss`, the file name is `style-xxx.qss`, here `xxx ` is the name of the theme, so that the software can detect the theme.\nThen modify the `qss` file according to your preferences. The syntax of `qss` is similar to `css`, but the support is not complete. Whether the `css` syntax can be used depends on the actual effect, haha.\nAdd theme code is welcome!(PR)\n\u003e In addition, the software has not been deliberately optimized for the theme, and the class and id may have been written casually, so there is no guarantee that future codes will be fully compatible with current qss.\n\n\n## Issue and improvement\n\nCreate issue [here](https://github.com/Neutree/COMTool/issues/new)\n\n\n## License\n\n[LGPL-3.0 License](LICENSE)\n\nAnd used these open source projects as libraries:\n\n* [PyQt5](https://www.riverbankcomputing.com/software/pyqt/): [GNU GPL v3](https://www.riverbankcomputing.com/software/pyqt/)\n* [pyserial](https://github.com/pyserial/pyserial): [BSD-3-Clause](https://github.com/pyserial/pyserial/blob/master/LICENSE.txt)\n* [requests](https://github.com/psf/requests): [Apache 2.0](https://github.com/psf/requests/blob/main/LICENSE)\n* [Babel](https://github.com/python-babel/babel): [BSD](https://github.com/python-babel/babel/blob/master/LICENSE)\n* [qtawesome](https://github.com/spyder-ide/qtawesome): [MIT](https://github.com/spyder-ide/qtawesome/blob/master/LICENSE.txt)\n* [pyte](https://github.com/selectel/pyte): [LGPL 3.0](https://github.com/selectel/pyte/blob/master/LICENSE)\n* [paramiko](https://github.com/paramiko/paramiko): [LGPL 2.1](https://github.com/paramiko/paramiko/blob/main/LICENSE)\n* [pyperclip](https://github.com/asweigart/pyperclip): [BSD-3-Clause](https://github.com/asweigart/pyperclip/blob/master/LICENSE.txt)\n\n## Donate\n\nIf this project helps you, you can buy me a cup of coffee\n\n![](./COMTool/assets/donate_wechat.jpg) ![](./COMTool/assets/donate_alipay.jpg)\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneutree%2Fcomtool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneutree%2Fcomtool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneutree%2Fcomtool/lists"}