Power Automate Desktopがなんとなく使える講座 番外編 Pythonのライブラリと値の受け渡し

(執筆 2021/5/10)
　Power Automate DesktopでPythonが使えるようになっていますが、どのような環境なのか確認します。

# Python環境
## Pythonのバージョン

```python:Pythnスクリプトの実行
import sys
print(sys.version)
```
|出力|
|:---|
|﻿2.7.9 (IronPython 2.7.9 (2.7.9.0) on .NET 4.0.30319.42000 (64-bit))|

```python:Pythonスクリプトの実行
import sys
print(sys.platform)
```

|出力|
|:---:|
|cli|

　IronPython2.7.9は2018年10月9日にリリースされました。Python2のサポートは終了しており、IronPython3.4が2021年4月20日にリリースされているので、近々メジャーバージョンが変わると思います。

## ビルトインモジュール
　コンパイル時に組み込まれたPythonモジュールです。

```python:Pythonスクリプトの実行
import sys
print(sys.builtin_module_names)
```
|﻿モジュール名|
|:--|
|imp|
|sys|
|unicodedata|
|_ast|
|clr|
|exceptions|
|future_builtins|
|array|
|binascii|
|bz2|
|cmath|
|copy_reg|
|cPickle|
|cStringIO|
|datetime|
|errno|
|gc|
|_md5|
|_sha|
|_sha256|
|_sha512|
|itertools|
|marshal|
|math|
|mmap|
|msvcrt|
|nt|
|operator|
|pyexpat|
|re|
|select|
|signal|
|thread|
|time|
|winsound|
|xxsubtype|
|zipimport|
|zlib|
|_bisect|
|_codecs|
|_collections|
|_csv|
|_ctypes|
|_ctypes_test|
|_functools|
|_heapq|
|_io|
|_locale|
|_random|
|_socket|
|_sre|
|_ssl|
|_struct|
|_subprocess|
|_warnings|
|_weakref|
|_winreg)|

## Pythonのインストールディレクトリ
　Python のプラットフォーム依存なファイルがインストールされているディレクトリ名です。

```python:Pythonスクリプト実行
import sys
print(sys.exec_prefix)
```

|出力|
|:---|
|file:///C:/Program Files (x86)/Power Automate Desktop/IronPython.DLL|

## Pythonの外部モジュール使用
　組み込まれていないモジュールを使いたい場合は、[IronPythonのサイト](https://ironpython.net/)から IronPython.2.7.11.zip をダウンロードして解凍します。
　Pythonスクリプトの実行で、モジュールフォルダパスに、解凍した中にあるLibフォルダの場所を入れれば、モジュールを使うことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/a7412ee2-cfd9-727c-5ae0-426c6aa24a4b.png)
　jsonライブラリが使用できると、Pythonとの値の受け渡しがjsonでできるようになりそうです。

### ironpkg は使えない
　その他、Numpyなどのパッケージをインストールするには [ironpkg-1.0.0.py](https://raw.githubusercontent.com/ptmono/anipang_b/master/ironpkg-1.0.0.py) を使って下記のように行うという情報が多数あります。（[ここ](https://stackoverflow.com/questions/29397540/how-to-install-numpy-and-scipy-for-ironpython27-old-method-doesnt-work)）
　IronPython.2.7.11\net45 のフォルダにironpkg-1.0.0.pyをセットし、以下のコマンドを実行します。

```
ipy -V PythonContext 2.7.0.40 on .NET 4.0.30319.225
ipy ironpkg-1.0.0.py --install
..\ironpkg scipy numpy-2.0.0b2-1.egg
```
　以下のメッセージが出て、成功しません。無くなってるサイトのフィルを見に行こうとしてるためだと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/87893bc0-9441-185b-3e70-e6db97b5e204.png)

### pipコマンドをインストール
　[Pip in IronPython 2.7.5](https://ironpython.net/blog/2014/12/07/pip-in-ironpython-275.html)によると、以下のコマンドでpipがインストールできます。

```
ipy -X:Frames -m ensurepip
```
　ライブラリとしては、html5libがインストールできます。

```
ipy -X:Frames -m pip install html5lib
```

　それ以外のNumPyとか、Pandasなどはインストールできませんでした。

### IronPython 2.7 のライブラリを使う
　Pythonスクリプトの実行で指定するモジュールパスは、1つだけなら、フォルダ名をそのまま入力すればよいのですが、複数を使いたい場合は、リストにして渡します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/51d583b9-725c-02a5-5c54-fb20fa597a6b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/f807f191-c7d6-b32b-c98c-5d23ab068dfa.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/53dbc212-47ca-7c83-8064-1368fa91972b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/cc094620-765a-5228-7838-00e6aae89167.png)
　

## Pythonへの値の渡し方
　値が1つの場合、Pythonのコードの中で **%変数名%** を記述すれば、値を受け取ることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/1ab2e031-0d54-d284-31ec-a4762250c259.png)

　値がリストの場合は改行を含む文字列として渡されますので、**"""%変数名%"""** として **split()** で分割してリストに戻します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/01dedfac-952e-60d9-c750-4704b1a3b66b.png)

## Pythonからの値の受け取り方
　Pythonのprintで出力した値は、Power Automate Desktopの変数でテキスト値として受け取ることができます。

　リスト値を受け取る場合は、まずPython側で値を改行で区切って出力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/23a1dcff-dde2-9f65-e39a-bb18ce9cd283.png)
　Pythonからの出力は、最後に余分な改行があるので、トリミングした後にテキストの分割を行うと、リスト値になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/9ad2228e-25e6-35c9-3309-e684a8a397c7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/efb0c0da-697b-a853-fb30-78a70135d327.png)

# VBScriptのバージョン

```:VBScriptの実行
WScript.Echo "Major: " & ScriptEngineMajorVersion & vbCrLf & _
             "Minor: " & ScriptEngineMinorVersion & vbCrLf
```

|Major: 5|Minor: 8|
|:--|:--|