描述

描述

描述

我正在尝试制作一个 systemd 服务文件来运行一个 python 脚本,以便使用热敏打印机打印一些内容。埃斯科波斯是我用来访问热敏打印机控制的库。但是 escpos 需要 sudo 才能访问 usb 设备。

问题

如何创建 systemd 服务文件,使 exec 命令获得 root 访问权限?根据互联网上的一些答案,如果我不为 User 设置任何内容,则默认 exec 应该会自动获得 root 访问权限。但我仍然无法运行我的程序。希望有人能帮助我发现我的错误。

代码

Python

文件:/usr/local/etc/test/testPrint.py

from escpos.printer import Usb
#require escpos use "pip install python-escpos" to install the library
""" Seiko Epson Corp. Receipt Printer (EPSON TM-T88III) """
p = Usb(0x4b43, 0x3538, 0, 0x82, 0x02)
p.text("Hello World\n")
p.text("\n\n\n")
p.cut()

我可以sudo python3 /usr/local/etc/test/testPrint.py毫无问题地运行并打印热敏打印机上的文本。

服务文件

文件:/etc/systemd/system/testPrint.service

[Unit]
Description=Test Python escpos print
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/bin/python3 /usr/local/etc/test/testPrint.py
[Install]
WantedBy=multi-user.target

当我尝试运行该命令时sudo systemctl start testPrint.service,它给出了错误

错误日志

命令:sudo journalctl -u testPrint.service

python3.5[27149]: Traceback (most recent call last):
python3.5[27149]:   File "/usr/local/etc/test/testPrint.py", 
python3.5[27149]:     from escpos.printer import Usb
python3.5[27149]: ImportError: No module named 'escpos'
systemd[1]: testPrint.service: Main process exited, code=exit
systemd[1]: Failed to start Test python escpos print.
systemd[1]: testPrint.service: Unit entered failed state.
systemd[1]: testPrint.service: Failed with result 'exit-code'

如果我在不使用 sudo 的情况下运行 python,则会出现相同的错误“python3 打印测试.py

编辑:

只是为了提供一些额外的信息。我使用sudo pip3 安装 python-escpos安装模块。我的操作系统是Ubuntu 16.04

答案1

我已经解决了这个问题。

此错误不是由 root 权限引起的,而是由埃斯科波斯模块在 root 用户下无法正确安装。在我重新安装埃斯科波斯所有sudo pip3 install python-escpos代码都可以正常工作并能够打印文本。

相关内容