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

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

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

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

Python 3.x

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

解決済

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

tamap
tamap

総合スコア11

Windows 10

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

Python 3.x

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

2回答

0グッド

0クリップ

580閲覧

投稿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()

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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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からは同じエラーが出ています。なかなか難しそうですね。

回答2

1

自己解決

●ドライバー
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

総合スコア11

ps_aux_grep👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

総合スコア1032

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Windows 10

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

Python 3.x

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