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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Q&A

解決済

1回答

4714閲覧

[pywinauto] のprint_control_identifiers() の出力が文字化けする

yamatail

総合スコア77

Python 3.x

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

0グッド

0クリップ

投稿2019/03/06 05:31

編集2019/03/06 08:42

pythonで他のアプリケーション操作を行うプログラムを作っています。

そこで使おうと思っているモジュールが[pywinatuo]なのですが、
その中のメソッドでprint_control_identifiers()なるものがあります。

これは
「コントロールできる識別子を出力して確認できる」
もののようなのですが肝心の出力が文字化けしてしまいます。(shift-jis)

どうにか、utf-8など見やすい形で出力したいのですが、
どなたかご存知の方いらっしゃいませんでしょうか。

以下、動作させたコードです。

python3

1# -*- coding: utf-8 -*- 2from pywinauto import Application 3 4app = Application(backend='uia').start(r'mspaint.exe') 5dlg = app.window(title_re='.* - ペイント') 6 7print(dlg.ファイル.print_control_identifiers()) 8--------------------------------------------------------------- 9[out] 10Control Identifiers: 11b'\nButton - \'\x83t\x83@\x83C\x83\x8b \x83^\x83u\' (L-1075, T185, R-1019, B208)\n[\'\x83t\x83@\x83C\x83\x8b \x83^\x83u\', \'Button\', \'\x83t\x83@\x83C\x83\x8b \x83^\x83uButton\']\nchild_window(title="\x83t\x83@\x83C\x83\x8b \x83^\x83u", control_type="Button")' 12None 13

<開発環境>
spyder - python3.7.2
windows10 64bit

<補足1>
print(dlg.ファイル.print_control_identifiers().decode("sjis"))
を試したところ、以下のエラーが出ました。
開発環境が違うと変わるのか...

text

1AttributeError Traceback (most recent call last) 2<ipython-input-13-e37c73943476> in <module> 3 9 4 10 # handle Open dialog 5---> 11 print(dlg.ファイル.print_control_identifiers().decode("sjis")) 6 7AttributeError: 'NoneType' object has no attribute 'decode'

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

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

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

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

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

guest

回答1

0

ベストアンサー

質問文のバイト列をシフトJISとしてdecodeしたら見れました。

主にコメント欄のやり取りで解決したので、その要約を書いておきます

既存のgithubのissueで同様の問題(修正済み)を発見。
https://github.com/pywinauto/pywinauto/issues/309

質問者の使用バージョンを確認 → 0.6.1。

そのバージョンでは修正されていないことを伝え、新し目のものを再インストールすることを勧めて解決。

投稿2019/03/06 05:48

編集2019/03/07 01:06
hayataka2049

総合スコア30933

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

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

yamatail

2019/03/06 08:43

試してみたところ、私の場合は<補足1>のようなエラーがでてしまい上手く出力されないようです。 ※質問の一番下に<補足1>を追加させていただきました。
hayataka2049

2019/03/06 09:06

dlg.ファイル.print_control_identifiers()は直接標準出力へ出力し、Noneを返すというメソッドのようですね。私はb'\nButton - (以下略)のバイト列リテラルを直接コピペしてデコードしたのでそれで行けると思いましたが、外側のprintはそもそも出力に寄与していなかった訳です(よく見るとNoneが表示されていますが)。見落としていました。
hayataka2049

2019/03/06 09:39 編集

githubのissue漁ったら、数年前の同様の症状の報告を見つけました。2017年には修正のプルリクがマージされているはずです。 https://github.com/pywinauto/pywinauto/issues/309 いつ、どうやって入れましたか? それによっては更新で解決します。念の為、pywinatuoのバージョンを調べてください。
yamatail

2019/03/07 00:27 編集

お返事遅くなって申し訳ありません。 英語のページまで調べて頂きありがとうございます。 pywinautoは、pywinauto-0.6.1.zipをダウンロードしてsetup.pyをinstallしたかと思います。 ちなみにAnaconda3のPromptでinstallなどは行っています。
hayataka2049

2019/03/07 01:03 編集

0.6.1だと古すぎます。0.6.6が最新です。あと、condaかpipから入れなかったのにはなにか理由があるのでしょうか? setup.pyから入れたのであれば、インストールされたファイルを調べて手動で削除してください(調べるとやり方が出てきます)。その後、然るべき方法で再インストールしてください。condaでも0.6.5が入れられます。pipなら6.6が入ります。
yamatail

2019/03/07 00:46

ありがとうございます。調べて再インストールしてみます!
hayataka2049

2019/03/07 01:04 編集

その参考ページがやっていることは少し特殊なのと、そもそも時期的に古くて参考にならないので、あまりあてにしない方が良いかと思います。とりあえずsetup.pyで入れると管理が大変なので、できるだけcondaかpipで入れて成功しているページを探しましょう。 https://pypi.org/project/pywinauto/#history ソースを見た感じだと0.6.2で最低限改善すると思いますが、新し目のものの方がバグは減っている訳なので、condaで入る0.6.5かpipで入る0.6.6をおすすめします(どちらかといえば前者)。
yamatail

2019/03/07 01:00

condaで6.5をインストールしたところ、 出力も文字化けなく表示されるようなりました。 大変助かりました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問