質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

1131閲覧

pythonでレシートプリンターを操作したい。windowsです

tamap

総合スコア12

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/10/08 06:11

実現したいこと

windows python 3.7で、サーマルプリンターを扱いたいですが、エラーが出てできませんでした。
以下参考サイト(同じプリンターでラズパイ用です)です。
https://blog.capilano-fw.com/?p=7182
https://qiita.com/kurikurisan/items/15660bed340504f02032

プリンターも同じです。
Symcode 58MM USB サーマルレシートプリンター ESC/POS

windowsでやりたいと思ったのですが、無理なのでしょうか。。

発生している問題・エラーメッセージ

Traceback (most recent call last): File "c:/Users/user/Documents/p/receipt_printer/receipt02.py", line 5, in <module> p = Usb(0x0416, 0x5011, 0) File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\escpos\printer.py", line 51, in __init__ self.open() File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\escpos\printer.py", line 68, in open self.device.detach_kernel_driver(0) File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\usb\core.py", line 1120, in detach_kernel_driver self._ctx.managed_open() File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\usb\core.py", line 113, in wrapper return f(self, *args, **kwargs) File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\usb\core.py", line 131, in managed_open self.handle = self.backend.open_device(self.dev) File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\usb\backend\libusb1.py", line 804, in open_device return _DeviceHandle(dev) File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\usb\backend\libusb1.py", line 652, in __init__ _check(_lib.libusb_open(self.devid, byref(self.handle))) File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\usb\backend\libusb1.py", line 600, in _check raise NotImplementedError(_strerror(ret)) NotImplementedError: Operation not supported or unimplemented on this platform

該当のソースコード

python
from escpos.printer import Usb

p = Usb(0x0416, 0x5011, 0)
p.text("Hello World\n")
p.cut()

どなたかお知恵をお借りできれば助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2022/10/08 06:47

そのプリンタの取説にWindowsでの操作法が載ってると思いますが、それではダメなんでしょうか
tamap

2022/10/08 07:07 編集

なるほど、、よく考えたらプリンターをpythonで扱ったのは初めてでした。ドライバーとか入れる必要があるのでしょうかね。説明書見てみます。 ありがとうございますm(_ _)m
tamap

2022/10/09 23:47

windowsのドライバーを入れて、テスト印刷ボタンというのを押したら印刷できまsた。しかし、pythonからは同じエラーが出ています。なかなか難しそうですね。
guest

回答2

0

自己解決

●ドライバー
zadigは以下の中ほどのdownloadから
https://zadig.akeo.ie/

zadigならOptionsからList All Devicesでデバイスを表示し、該当するプリンタを選び、矢印の先をlibusb-win32 にしてその下のボタンをクリックします。

●pythonコード改変
そもそも python-escposがwin対応していないようでライブラリのprinter.pyの
try:
check_driver = self.device.is_kernel_driver_active(0)
except NotImplementedError:
pass

if check_driver is None or check_driver:
try:
self.device.detach_kernel_driver(0)
except usb.core.USBError as e:
if check_driver is not None:
print("Could not detatch kernel driver: {0}".format(str(e)))
をコメントアウト

これで、いったんできました。
しかし、バーコードは機能しなかったで、別途画像化しました。
ありがとうございました。

投稿2022/10/16 03:32

tamap

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

 コードに書かれたp = Usb(0x0416, 0x5011, 0)のうち0x0416, 0x5011は参考記事の著者の環境の値です.ここにはあなたの環境で使われるUSB DeviceIDを記入しなくてはなりません.

 著者とあなたとで,同じDeviceIDなら他に問題があると思われます.しかしエラー文そのままコピペでググるとDeviceIDに問題があると指摘されている記事が多々見つかりますので,IDに違いがある可能性が高いとみて解答致します.

 DeviceIDを確認するために,参考記事ではlsusbコマンドを使っていましたが,Windowsにはありません.代わりのコマンドを調べるべく「windows lsusb」とググって出てきたShellHacksのなどのサイトを参考に,USBのIDを取得してみましょう.

ShellHacksではlsusbの代わりにPowerShellのコマンドで

shell

1Get-PnpDevice -PresentOnly | Where-Object { $_.InstanceId -match '^USB' } | Format-List

を実行すると,lsusbと同様の情報が得られることが示されています.

 私の環境に繋がっている適当なUSBデバイスに当てはめて話すと,DeviceIDのカラムにUSB\VID_0B05&PID_19AF&MI_02\6&DE2EAF5&0&0002と書かれていたので,このうちUSB\VID_0B05PID_19AFの2つを使ってUsb(idVender, idProduct)という引数に一致するよう,VIDPIDの後に続く16進数をそれぞれ代入してp = Usb(0x0B05, 0x19AF, 0)にすると良い.ということになります.

投稿2022/10/08 15:56

編集2022/10/08 16:34
PondVillege

総合スコア1579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tamap

2022/10/08 23:53

ありがとうございます! ことばたらずですみません。 Usb 0x0416, 0x5011 は私の環境でも同じでした。これは、事前に確認済みです。
PondVillege

2022/10/10 13:43

それは失礼しました,この問題が起きる原因として,Linuxでしか実装されていないことに起因するという説も見かけました.確かにnot supported or unimplemented on this platformでwindowsのことをthis platformと呼んでいるとすれば理解できます.力添えできず申し訳ないです. 気休めの原因例ですが,そのUSBポートに対して,他のソフトウェアがアクセスしていることが原因であるというのも見かけました.2つのソフトウェアで同時にアクセスはできないので,Windowsなどのシステムが占拠している可能性もあります.
tamap

2022/10/16 03:31

ありがとうございました! 別途解決しましたのでシェアさせていただきますm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問