iPhoneでPython実行。ショートカット利用 1

2025-01-25

iPhone アプリ

関連記事
Androidで使っていたアプリや設定を同様な感じになるように移していっているのだが、簡単な計算(自動車の燃費)をPythonでさせていたのを移そうとして苦労したので、覚書を書いておく。
*今ならスマホでエクセルを使うのが簡単だが、10年以上ノートに記録してきてるし、とりあえず使えるようにしたいというのもあったので。

Androidでは、Pydroid 3というアプリを使っていた。名前からして、iPhoneに同じアプリはなさそう。
探してみると、以下のようなのがみつかった(他にもいっぱいあったけど)。
  • Pythonista 3
    圧倒的にメジャーそうだが、1,500円。電卓でもできるぐらいの計算だから1,500円はなぁ…。
  • Carnets
    Jupyter Notebookみたいなもの。Jupyter NotebookはPython本を見ると必ずでてくるが、イマイチなんだかよくわかっていない。インストールしてみたけど、なんか違う。
  • a-Shell
    shellというかCUIを使えるようにするアプリ。Pythonもデフォルトで入っている。a-Shell miniという縮小セット版もあり、当初はそちらをインストールしたが、フォルダのbookmark関連のコマンドが入ってなかったので、miniではない方にかえた(miniでもPythonは入っていた)
で、いつも使うスクリプトをa-Shellでうまく使えないか検索して見つかったのが、参考情報1。やりたいことそのままっぽいのだが、何をどう設定してるのかさっぱり理解できなかった。以下はそれを再現するために調べたり試していったことの記録。
  1. a-ShellでPython実行
    とりあえず基本的な確認として、a-ShellでPythonのprint文を実行
    普通に動くようだ

  2. ショートカットにa-Shellがない
    次はショートカットの中でどうa-Shellを呼ぶのかさがしたのだが、見つからない。下図のアプリのショートカットをスクロールしてもa-Shellはなし。すべてのショートカットを開いてもない
    確かに参考情報1の中にもショートカットと書いてあるし、a-Shellの説明にもショートカットで使えると書いてあるけど、ショートカットというのは一般名詞すぎてほんとにこのショートカットアプリの事をさしているのか疑惑が生じる。
    でもさらに探していると見つかった。すべてのショートカットを開いてから、右上の+アイコンで新規ショートカットを作ると現れた。


    右上の+アイコンをタップ


    a-Shellをタップ
    「コマンドを実行」が使うショートカット

  3. ショートカットのTextって?
    次はTextっていうのが見つからない。探すと、新規ショートカットの「アクションを検索」の下にある「スクリプティング」をタップすると出てきた(スクロールして結構下の方)


    テキストをタップ
  4. ここにスクリプトを入力するかコピペする。

  5. Base64エンコード-デコード?
    1. command not found
      とりあえず、元々Androidで使っていたスクリプトをテキストにコピー。
      Base64でエンコードしてデコードする意味が解らなかったので、そのままechoしてPythonに流してみることにした
      *a-Shellの「コマンドを実行」の入力の注意点について、末尾の追記を参照

      実行してみると(右三角の再生アイコン)
      command not found
      なんとなくだが、2行目以降?がPythonではなく、シェルにわたっている感じがする

    2. 1行のスクリプト
      一行ならどうなるか試してみる


      実行(右下再生ボタン)


      完了をタップ
      ちゃんと実行できている

    3. 2行のスクリプト
      2行なら?
      command not found になった

    4. Base64エンコード-デコード
      よくわからないけど、Base64エンコード-デコードを入れてみる
      うまく実行できた。仕組みはよくわからないが、pythonに改行されずにおくられているようだ。
      コマンドを実行のところにオプションがあったので、設定してみると、過程がみえやすくなった。

      当初オプションの意味がよくわからなかったが、そのままでa-Shellを開いて実行するということ。コマンドがどう処理されたかがわかる。
      暗号のような文字列をデコードして、Pythonに渡していることがわかる。
      ちなみにオプションのデフォルトはコマンドに依りますとなっている。うまく実行できた時はエクステンション内(恐らくショートカットの表示画面という意味)で実行され、エラーが出たときはa-Shellが開くという動作をしているようだった

    5. 20行ぐらいのスクリプト
      もっと行数を増やす(実際はここで元のスクリプトを試してうまくいかなかったので、これを試した)
      command not found になった。暗号のようなものが表示されている

    6. Base64の行区切りを 76文字ごと→なし に変更
      Base64エンコードのところに">"があったのでタップしてみた


      76文字ごと→なしに変更

      実行

      うまく実行できた。Base64のエンコードの途中に改行が入っていたため、そこ以降はPythonに入力されずにシェルに入力されたと思われる

    7. Base64エンコード-デコードすると何が違うのか?
      エンコード-デコードなし


      command not found になっている

      エンコード-デコードあり
      command not foundは出ていない。

      エンコード-デコードなしだと、a-Shellに改行(Enter?)が送られ、ありだと送られないようだ。print("123")とprint("456")の間には改行はあるのに、なぜそうなるかは不明。CRとLFの違いとかがある?

  6. input(ユーザー入力)付スクリプト
    だいたい解明できたので、元々移植したかったスクリプトを実行
    また、違うエラーが発生…。なんとなく、input文が悪い気がする…

    input文は消して、実行時に入力していた数値を、スクリプトに埋め込んでみる

    ちゃんと計算された。input文が悪いようだ。
    もともと動いていたスクリプトなので、テキストをパイプで流し込むやりかたと相性?が悪いようだ

という事で、再現はできたのだが、input付のスクリプトはもうちょっと工夫が必要。

なお、上記ショートカットで、"python -"となっているが、"python"にしても同じだった(参考情報1の真似をして"python -"にしていたが)。

また、参考情報1の最後にあった「停止して…」は、なくても問題なかった。条件によってはいるのかな?


追記:「コマンドを実行」の入力の注意点
a-Shellのコマンドを実行の文字列("echo xencoded_code |base64 -d|python -"等)は一つの入力枠の中に記載しないとエラーがでる。入力枠をわけると、その間で改行が入るようだ 

 

"echo '123'"を一つの入力枠に書いた場合
問題なく実行できた

 

"echo"と"'123'"を二つの入力枠にわけて書いた場合
command not found となる