広告

posted by fanblog

2016年02月28日

pywinautoとcx_freezeとpywin32の共存

念願のpywinautoをインストールしようと思う。
windowsの自動化だ。

検索するとver.0.4.0がよく出てくる。
これが最新版なのかな?
>sourceforge python win32 automation
>https://sourceforge.net/projects/pywinauto/files/

もう少し根気よく検索していくと
ver.0.4.2で記載しているサイトを見つける。
英語だけど、、、公式サイトかな?
でもダウンロードページに行くと、
さっきと同じ0.4.0のダウンロードサイトに行くようだ。
>pywinauto 0.4.2 documentation
>http://pywinauto.googlecode.com/hg/pywinauto/docs/getting_started.html

もっと調べていくとpipでインストールできると
書いてあるQ&Aを見つける。
pythonの3系もバンドルされている、とある。
(バンドルの意味はわからないが、、)
>yahoo知恵袋 pythonのpywinauto-0.4.0のインストールについて質問です。
>http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14147728284

pipとは何ぞやと思いながら、そのページに書いてある
pip install pywinautoというコマンドを
コマンドプロンプトに打ってみる。

するとコマンドプロンプトの画面にたくさん文字が出てきて
よく見ると0.5.4と書いてある。
どうやら最新版は0.5.4のようだ。

pipとはpythonのパッケージをインストール、アンインストールする
仕組みのようだ。
(pip uninstall パッケージ名でアンインストールもできるようだ)
よしこれでついにpywinauto をインストールしたぞ。

ということで、下記のサイトを参考にして
さっそくサンプルコードを書いてみる。
>necoakの日記 pywinauto で、pythonでWindows GUI 自動化の試み
http://d.hatena.ne.jp/necoak/20120917/1347866653

from pywinauto import application
app = application.Application.start("C:\Program Files (x86)\Internet Explorer\iexplore.exe")

拡張子は.pyでいいのかな。pythonだし。
とりあえずauto01.pyで保存。
で、コマンドプロンプト上でcdコマンドを使って、
ファイルのあるフォルダに移動し
python auto01.pyコマンドで実行。

あれ?回らない。
win32apiがない、と表示される。
どういうことだ。。

win32apiがない.JPG

検索して調べると、pywin32という
パッケージをインストールする必要があるようだ。
pipで入れようと試みるが、コマンドを打っても入らない。
下記のサイトのpywin32-220.win-amd64-py3.4.exeをダウンロードしてインストール。
>sourceforge Python for Windows Extensions
https://sourceforge.net/projects/pywin32/files/pywin32/Build%20220/

そして、もう一度実行(python auto01.py)

、、、回らない。
今度はソースのstart関数にcmd_lineというものが足りてないらしい。

cmd_lineが足りない.jpg

検索し続けた結果、
下記のように書き直してみた。
ちゃんとcmd_lineも書いてある。

from pywinauto.application import Application
app = Application().Start(cmd_line=u'"C:\Program Files (x86)\Internet Explorer\iexplore.exe" ')

実行!(python auto01.py)

やったー成功。
今となっては懐かしいinternet explorerが起動。

internetexplorer起動.jpg

「32bitプログラムは32bit pythonで自動化すべき(あなたは64bit pythonを使っているけど)」
というwarningが出てるけど、まあ気にしない。
時代は64bitパソコンに移行してるんだから。


で、全てが上手くいったように思えたが、、、

前回「HelloWorld」とテキストファイルに出力するだけの
pythonプログラムを書いて、cx_freezeを使ってexeファイル化したが、、
>pythonでexeファイルを作ろう
http://fanblogs.jp/mountain4101/archive/48/0

pywinautoとpywin32を入れた後に、
上記テキストファイル出力プログラムを再度exeファイル化しようとしたら、、、

エラー。

exeファイルとpython34.dllファイルはできたが、
他のファイルが吐き出されなくなった。

cx_breeze_error2.JPG

exeファイルをダブルクリックしてもエラーで動かない。

えー、ということはpywinauto・pywin32による自動化と
cx_freezeによるexe化の両方を実現することはできないということ!?

そんなアホな話があってたまるか。

cx_breeze_error.JPG

エラー部分を見ると、
C:\Python34\Lib\site-packages\win32\libのフォルダにある
「win32verstamp.py」というファイルの123行目でエラーが起きているらしい。

で、調べた。
日本語のサイトには書いてない。
英語のサイトもたくさん見た。英語苦手だけど。
で、下記のサイトにたどり着く。

>[python-win32] win32api - small patch for win32verstamp.py
https://mail.python.org/pipermail/python-win32/2014-December/013327.html

「if not ofn:」を「if ofn is None:」に直せということか?
確かにwin32verstamp.pyの129行目に「if not ofn:」があるので
「if ofn is None:」に書き換えてみる。

そして、テキストファイル出力プログラムを再度exe化してみる。。。
やったー回った。

exeファイル復活.JPG

test.exeファイルを実行すると
前回同様、ちゃんとHelloWorldと書かれたテキストファイルが出力された。

今回はさすがに無理かと思ったけど、
海外にはちゃんと先に悩んで解決した人がいるんだと思った。
これでpywinauto・pywin32とcx_freezeを共存させることができた。

自動化のプログラムをたくさん作ろう。





posted by iyoder at 16:04 | Comment(0) | TrackBack(0) | プログラム
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
http://fanblogs.jp/tb/4786829
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
最新記事
<< 2018年12月 >>
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
カテゴリーアーカイブ
ファン
プロフィール
最新コメント
×

この広告は30日以上新しい記事の更新がないブログに表示されております。