<pyinstaller, Python, WSH> Pythonスクリプトから実行ファイル(exe)を作る。

Pythonスクリプトから実行ファイルexeを作る、変換する。

pyinstallerちゅうのでできるらしい。

試してみた。
インストールは、pipさんで。condaさんにはなかった。
例のCalculatorをwin32comで、制御するスクリプトを変換。
スクリプト

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import win32api as WScript
import win32com.client


if __name__ == '__main__':
    WshShell = win32com.client.Dispatch("WScript.Shell")
    WshShell.Run("calc")
    WScript.Sleep(100)
    WshShell.AppActivate("Calculator")
    WScript.Sleep(100)
    WshShell.SendKeys("1{+}", 0)
    WScript.Sleep(500)
    WshShell.SendKeys("2")
    WScript.Sleep(500)
    WshShell.SendKeys("~")
    WScript.Sleep(500)
    WshShell.SendKeys("*3")
    WScript.Sleep(500)
    WshShell.SendKeys("~")
    WScript.Sleep(2500)

で、変換。

>pyinstaller -F -w calc.py

で、なにやらいろいろ呪文が並ぶ。
で、calc\distというフォルダの下に、calc.exeを発見。
できたっぽい。
で、クリック。

が、、問題発生

止まらない、、、
どんどんcalc.exeプロセスが増殖して、やりたい放題。
暴走。。。

しょーが無しに、Windows強制シャットダウン。
あかんがや、、、まったく。。。

その後、sys.exit()を最後に付ければ、暴走しないことを確認。

sys.exit()は必須。

お世話になったところ。

kconcon3.hatenablog.com

edosha.hatenablog.jp

マニュアル。
PyInstaller Manual — PyInstaller 3.4 documentation

nekoyukimmm.hatenablog.com

<WSH, win32com, Python> WSHとwin32comの関係

WSH(Windows Script Host)と、win32comを眺めてみた。
win32comはどうやら、おそらく、WSHとほぼ同じ。

WScriptCalcを起動して、キーを送るスクリプト

https://msdn.microsoft.com/ja-jp/library/cc364423.aspx

set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "calc"
WScript.Sleep 100
WshShell.AppActivate "Calculator"
WScript.Sleep 100
WshShell.SendKeys "1{+}"
WScript.Sleep 500
WshShell.SendKeys "2"
WScript.Sleep 500
WshShell.SendKeys "~"
WScript.Sleep 500
WshShell.SendKeys "*3"
WScript.Sleep 500
WshShell.SendKeys "~"
WScript.Sleep 2500

これのpython/win32com版。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import win32api as WScript
import win32com.client


if __name__ == '__main__':
    WshShell = win32com.client.Dispatch("WScript.Shell")
    WshShell.Run("calc")
    WScript.Sleep(100)
    WshShell.AppActivate("Calculator")
    WScript.Sleep(100)
    WshShell.SendKeys("1{+}", 0)
    WScript.Sleep(500)
    WshShell.SendKeys("2")
    WScript.Sleep(500)
    WshShell.SendKeys("~")
    WScript.Sleep(500)
    WshShell.SendKeys("*3")
    WScript.Sleep(500)
    WshShell.SendKeys("~")
    WScript.Sleep(2500)

動作はまったく同じ。

ちなみに、WScriptをsubprocessで呼び出しても同じ。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import subprocess


if __name__ == '__main__':
    subprocess.run("calc.vbs", shell=True)

なるほど。。。
と、いうことで、win32comでの制御は、基本WScriptどおり。
下記、マイクロソフトのところで、調べものすれば、結構思い通りに制御できそう。

WshShell オブジェクト

参考。大変役にたちました。

Windows Script Host Laboratory

www.atmarkit.co.jp

<WSH> WScriptに変更する。

ちらっと、WSH (Windows Script Host)を探索中。

VBS(VBScript)で作ったファイルを、ダブルクリックで動かそうとしたら、コマンドプロンプトが起動した。
これを消すのは、既定のスクリプトホストをwscript.exeにしてあげればいいとのこと。

>cscript //h:wscript

の呪文を管理者権限で実施する。

で、下記のコードをhage.vbsで保存して実行。うまくいったなり。

Dim s
s=InputBox("hage")
MsgBox s

<OCR, tesseract, python> 光学的文字認識をやってみた。

諸事情により、画像imageから、テキストを抽出をやってみた。
光学的文字認識Optical Character Recognitionというらしい。

自分の土俵でできるか、、だったが、幸いにmsys2版があった。ラッキー。
で、必要なソフトのインストールからスタート。
このWikiに従う。
Home · tesseract-ocr/tesseract Wiki · GitHub

>pacman -S mingw-w64-{i686,x86_64}-tesseract-ocr
>pacman -S mingw-w64-{i686,x86_64}-tesseract-data-eng

mingw64を使ってこなかったが、ここで、大量にインストールが発生。
まあ、しょうがないので、進める。Go。

次。pythonのパッケージのインストール。

>conda install pillow
>pip install pyocr

で、環境変数設定。

export PATH=$PATH:/mingw64/bin
export TESSDATA_PREFIX=/mingw64/share/tessdata

以上でインストール完了。
では、始めます。

In [7]: import pyocr

In [8]: tool = pyocr.get_available_tools()[0]

In [9]: tool
Out[9]: <module 'pyocr.tesseract' from 'C:\\Anaconda3\\Lib\\site-packages\\pyocr\\tesseract.py'>

In [10]: from PIL import  Image

In [14]: txt = tool.image_to_string(
    ...:     Image.open('capture.PNG'),
    ...:     lang='eng',
    ...:     builder=pyocr.builders.TextBuilder(tesseract_layout=6)
    ...: )

できました。
できたtxtを覗いてみましたが、、、 なんか、行けてない感じ。
単純な英語テキストなのに、完璧には変換できてない。ちと、がっかり感。

少しくぐると、
Google Cloud Vision API というのがあって、こっちはすごいらしい。
次回試してみるかな。。。

github.com

qiita.com

<ATOM> Proxy越しのアップデート、その2

Proxy越しのアップデート、その2。
久々に、アトムさんatomSetting開いて、アップデートUpdateしようとしたらこけた。
どうもプロキシさんが変わったので、設定しなおした。
ちと、はまったので、メモ。

その1...
atomさんの設定ファイルは下記にある。

C:\\Users\\hage\\.atom\\.apmrc

その2...
設定ファイルの中身が正しく反映されているかは、下記コマンドで確認できる。

C:\Users\hage\.atom>apm config ls
; cli configs
globalconfig = "C:\\Users\\hage\\.atom\\.apm\\.apmrc"
user-agent = "npm/3.10.10 node/v6.9.5 win32 ia32"
userconfig = "C:\\Users\\hage\\.atom\\.apmrc"

; environment configs
node-gyp = "C:\\Users\\hage\\AppData\\Local\\atom\\app-1.23.3\\resources\\app\\apm\\bin\\\\..\\node_modules\\node-gyp\\bin\\node-gyp.js"

; userconfig C:\Users\hage\.atom\.apmrc
http-proxy = "http://hagehage.hohoho.com:80"
https-proxy = "http://hagehage.hohoho.com:80/"
strict-ssl = false

; globalconfig C:\Users\hage\.atom\.apm\.apmrc
cache = "C:\\Users\\hage\\.atom\\.apm"
progress = false

; node bin location = C:\Users\hage\AppData\Local\atom\app-1.23.3\resources\app\apm\bin\node.exe
; cwd = C:\Users\hage\.atom
; HOME = C:\Users\hage
; "npm config ls -l" to show all defaults.

その3...
https-proxyの設定のところは、プロキシの設定値を、httpsでなくて、httpsを抜かないといけん。
これが一番はまった。
sつけたままだと、アップデートのところで、次のエラーが発生した。

tunneling socket could not be established, cause=socket hang up

この人に助けられた。ありがとうです。
note.nkmk.me

昔の記事っす。
nekoyukimmm.hatenablog.com