python-3.x - Python 无法访问我的 USB 设备 - 权限不足
问题描述
Python 脚本无法将打印发送到我的 USB 爱普生收据打印机
我是 Ubuntu 的新手。我正在尝试将一些文本发送到通过 USB 连接到我的计算机的热敏标签打印机。按 F5 键在 Visual Studio Code 中执行代码后,出现以下错误
File "/home/hdadmin/Documents/Python/POS/env/lib/python3.6/site-packages/usb/backend/libusb1.py", line 595, in _check
raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 13] Access denied (insufficient permissions)
但是,如果我执行相同的代码:
sudo python3 -m test5.py
然后,它打印出来了。google了很多搜索,看来是和我的规则设置有关的问题,所以在/etc/udev/rules.d/printerRule.rules中做了如下规则
SUBSYSTEM=="usb", ATTRS{idVendor}=="1208", ATTRS{idProduct}=="3605", MODE="0666", OWNER="hdadmin"
问题仍然存在。
我需要解决这个问题的原因是,我以后需要使用 pyinstaller 编译 Python 脚本。如果我现在编译
pyinstaller --onefile test5.py
编译过程会很好,但是运行编译文件时仍然不允许我使用usb设备。以下是完整的错误报告
(env) (base) hdadmin@HiddenDimsum:~/Documents/Python/POS$ cd /home/hdadmin/Documents/Python/POS ; env PYTHONIOENCODING=UTF-8 PYTHONUNBUFFERED=1 /home/hdadmin/Documents/Python/POS/env/bin/python3.6 /home/hdadmin/.vscode/extensions/ms-python.python-2019.9.34911/pythonFiles/ptvsd_launcher.py --default --client --host localhost --port 42379 /home/hdadmin/Documents/Python/POS/test4.py
Traceback (most recent call last):
File "/home/hdadmin/.vscode/extensions/ms-python.python-2019.9.34911/pythonFiles/ptvsd_launcher.py", line 43, in <module>
main(ptvsdArgs)
File "/home/hdadmin/.vscode/extensions/ms-python.python-2019.9.34911/pythonFiles/lib/python/ptvsd/__main__.py", line 432, in main
run()
File "/home/hdadmin/.vscode/extensions/ms-python.python-2019.9.34911/pythonFiles/lib/python/ptvsd/__main__.py", line 316, in run_file
runpy.run_path(target, run_name='__main__')
File "/usr/lib/python3.6/runpy.py", line 263, in run_path
pkg_name=pkg_name, script_name=fname)
File "/usr/lib/python3.6/runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/hdadmin/Documents/Python/POS/test4.py", line 2, in <module>
printer = Usb(1208, 3605)
File "/home/hdadmin/Documents/Python/POS/env/lib/python3.6/site-packages/escpos/printer.py", line 51, in __init__
self.open()
File "/home/hdadmin/Documents/Python/POS/env/lib/python3.6/site-packages/escpos/printer.py", line 62, in open
check_driver = self.device.is_kernel_driver_active(0)
File "/home/hdadmin/Documents/Python/POS/env/lib/python3.6/site-packages/usb/core.py", line 1061, in is_kernel_driver_active
self._ctx.managed_open()
File "/home/hdadmin/Documents/Python/POS/env/lib/python3.6/site-packages/usb/core.py", line 102, in wrapper
return f(self, *args, **kwargs)
File "/home/hdadmin/Documents/Python/POS/env/lib/python3.6/site-packages/usb/core.py", line 120, in managed_open
self.handle = self.backend.open_device(self.dev)
File "/home/hdadmin/Documents/Python/POS/env/lib/python3.6/site-packages/usb/backend/libusb1.py", line 786, in open_device
return _DeviceHandle(dev)
File "/home/hdadmin/Documents/Python/POS/env/lib/python3.6/site-packages/usb/backend/libusb1.py", line 643, in __init__
_check(_lib.libusb_open(self.devid, byref(self.handle)))
File "/home/hdadmin/Documents/Python/POS/env/lib/python3.6/site-packages/usb/backend/libusb1.py", line 595, in _check
raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 13] Access denied (insufficient permissions)
由于我是 Linux 和 Ubuntu 的新手,因此我需要帮助和建议,以便获得连接到我计算机的 USB 设备的许可。预期的结果是,我应该能够运行 test5.py 而无需
须藤python3 -m test5.py
解决方案
感谢消费税。你完全正确。我的错误是在创建 .rule 期间
SUBSYSTEM=="usb", ATTRS{idVendor}=="1208", ATTRS{idProduct}=="3605", MODE="0666", OWNER="hdadmin"
相反,它应该如下所示,其中 GROUP="users"。我误读了“用户”并将其替换为用户名。我将规则更改为如下:
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="2016", GROUP="users", MODE="0666"
然后在终端写
$ sudo udevadm control --reload
并重新启动计算机。
推荐阅读
- python - Pandas 工作日偏移:请求简单示例
- windows - 如何安装本地开发的 WDM 驱动程序?
- azure - Azure Kubernetes 服务 (AKS) 和主节点池
- api - 如何访问大学记分卡中的录取数据?
- javascript - 使用秘密 console.log() 部署网站
- netlogo - Netlogo 中的分离度
- python - 这个斐波那契数列代码是如何工作的?
- google-apps-script - 如何从 Google 表格更改 onlyOnWeekday(day) 和工作日?
- python - 修改 agg 函数以使用降序 Python Pandas 显示值?
- google-cloud-platform - 导出 GCP 数据存储区并导入到不同的 GCP 项目