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

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

新規登録して質問してみよう
ただいま回答率
85.35%
PyAutoGUI

PyAutoGUIは、Windows、Mac OS、Linuxに対応した、Python用のGUI自動化ライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1773閲覧

autometorのシェルスクリプトで起動したい

hAmUgt

総合スコア1

PyAutoGUI

PyAutoGUIは、Windows、Mac OS、Linuxに対応した、Python用のGUI自動化ライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/06/12 04:32

編集2021/10/24 03:29

よろしくおねがいします、初めての質問です
いつも動かしているpyautoguiを用いたコードをautomatorのシェルスクリプトを使って実行したいのですが、エラーを吐かれてしまいます

autometor
cd /Users/----/Desktop
/Library/Frameworks/Python.framework/Versions/3.9/bin/python3 sendlist_V5.py

シェル
bin/bash

Which python
/usr/bin/python

発生している問題・エラーメッセージ

アクション“シェルスクリプトを実行”でエラーが起きました: “Traceback (most recent call last):
File "/Users/____/Desktop/test/sendlist.py", line 3, in <module>
import pyautogui
ModuleNotFoundError: No module named 'pyautogui'”

コード
import webbrowser
import pyautogui
import time
〜〜〜

#試したこと
同じディレクトリ内に別の適当なコードを書いて見ると動きました
コード内の問題でしょうか?
ターミナルから起動させると動くのですが…

追記:
python3 -c "import sys; print(sys.executable)"
python3 -c "import sys; print(sys.prefix)"

結果↓
イメージ説明

senglistV5

1import webbrowser 2import pyautogui 3import time 4 5pyautogui.FAILSAFE = True 6 7webbrowser.open("https://google.com") 8 9pyautogui.hotkey("command","Shift","x") 10time.sleep(2)

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

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

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

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

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

etherbeg

2021/06/17 12:08

まだ質問のステータスを解決済みに変更されていませんが、問題は未解決でしょうか。 私はpyenvは使用していないため、手元の環境で確認して回答するということができなかったため、あくまでヒントの提示という形で回答させていただきましたが、この回答でどの程度お役に立てたか気になっていました。 もしまだやりたいことが実現できていないのであれば、問題になっていること(新たなエラーが出たとか、ここが分からないとか)を添えてコメントで聞いていただければ、一緒に考えさせていただきます。 不要であれば特に返事はいらないのでこのままスルーしてもらって結構です。
hAmUgt

2021/10/23 04:56 編集

せっかく頂いた回答への返答がとんでもなく遅れてしまって本当にごめんなさい 頂いた環境SSの1枚目 python3 -c "import sys; print(sys.executable)" python3 -c "import sys; print(sys.prefix)" の部分ですが、実行したところ覚えのないパスが表示されました(その画像を追加しました) このパスを変更すればうまく動くのかな…?と思ったのですが、その変更方法にたどり着けずにいます…
etherbeg

2021/10/23 11:50

回答に手順を追記したので試してください。
guest

回答2

0

ベストアンサー

コマンドウィンドウにたとえば以下のようなコマンドを入力して、実行ボタンをクリックして結果を確認してみると、いろいろと見えてくるものがあると思います。

sh

1pwd 2echo $PATH 3which python3 4python3 -c "import sys; print(sys.executable)" 5python3 -c "import sys; print(sys.prefix)"

sys.executable は「Python インタプリタの実行ファイルの絶対パスを示す文字列」、sys.prefix は「Python のプラットフォーム非依存なファイルがインストールされているディレクトリの接頭辞を示す文字列」で、「 仮想環境 で起動されている場合、この値は site.py によって仮想環境を示すよう変更されます」。
https://docs.python.org/ja/3/library/sys.html

以下は私の環境での実行例です。

イメージ説明

一言でいえば、ターミナルで起動されているシェルの実行環境と、Automator から起動されるシェルの実行環境は違うので、それぞれで実行される Python(とどこからライブラリを読み込むか)も違う可能性がある、ということです。

私の環境での実行例をもう1点添付します。ここではPythonをフルパスで指定していることに注意してください。

イメージ説明


追記

具体的な手順を示しますので以下を試してください。

①. 「いつも動かしているpyautoguiを用いたコード」が書かれたファイルをテキストエディタなどで開いてください
②. そのコードの冒頭のimport文の直後に次のコードを挿入してください(書き写さずコピーしてペーストしてください)

python

1import sys 2print(f"{sys.executable=}")

③. ターミナルでこのファイルを実行してください(「ターミナルから起動させると動く」とのことなので動くはずです)
④. 上で挿入したコードの結果がターミナルに出力されているはずなので、それを確認してください。私の環境では次のようになりました

sh

1sys.executable='/Users/xxxx/xxxx/bin/python3'

⑤. 確認が終わったら上で総収したコードは削除してください
⑥. Automatorを開いて「シェルスクリプトを実行」アクションを追加してください
⑦. 上で確認したPythonパスを使ってコマンドウィンドウに質問に記されている次のコードを入力してください(以下ではPythonパスは私の環境の場合を例示しました)。"sendlist_V5.py"は①〜⑤で使用した「いつも動かしているpyautoguiを用いたコード」が書かれたファイルです

bash

1cd /Users/----/Desktop 2/Users/xxxx/xxxx/bin/python3 sendlist_V5.py

⑧. このAutomatorを実行して、エラーなく実行できるかどうか確認してください
⑨. 実行結果を教えてください。エラーが出た場合は再度エラー全文を教えてください

投稿2021/06/12 12:43

編集2021/10/23 11:57
etherbeg

総合スコア1195

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

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

hAmUgt

2021/10/23 12:27

ありがとうございます! 起動できたのですが、ターミナルから起動した場合は動いていたpyautoguiが、なぜか動かない箇所がありました Import "pyautogui" could not be resolvedPylancereportMissingImportsというエラーがありました この状態でもターミナルから起動させると動くのにautomatorからだとpyautoguiが動きませんでした…
etherbeg

2021/10/23 12:40

「この状態でもターミナルから起動させると動くのにautomatorからだとpyautoguiが動きません」というのは、ターミナルから起動したときも Import "pyautogui" could not be resolvedPylancereportMissingImports というエラーは出るが、プログラムは最後まで問題なく実行される、一方Automatorでは上記のエラーが出つつも動くことは動くが、pyautoguiを使用した処理が正しく実行されない、という意味ですか?
hAmUgt

2021/10/23 13:14

はい、そのとおりです…
etherbeg

2021/10/23 13:25

①「ターミナルから起動」というときの「ターミナル」とは、macOSに付属の「ターミナル.app」のことですか、それともVisual Studio Codeのウィンドウ内のエリアのひとつにある「ターミナル」のことですか? ②Automatorでも Import "pyautogui" could not be resolvedPylancereportMissingImports とのエラーが表示されるそうですが、それはどこに表示されるのですか? ③Automatorでは上記のエラーが出つつも動くことは動くがpyautoguiを使用した処理が正しく実行されない、とのことですが、具体的にどう正しく実行されないのですか? Automatorから実行したときは具体的にどういう問題があるのですか?
hAmUgt

2021/10/23 13:36

①MacOS付属のターミナル.appのことです ②AutomatorではなくVSCodeのimport文に黄色の波線と共に表示されています ③webbrowser.openの後にpyautogui.hotkeyショートカットキーを入れるのですが、その挙動が確認できません
etherbeg

2021/10/23 23:56 編集

②Visual Studio Codeのエディタ画面に表示されている黄色の波線や警告文は、Visual Studio CodeのPython用拡張機能であるPylanceが、コードを静的に解析して表示しているものです。コードを実行した結果表示されているものではありません。ターミナル.appでコードを実行した結果表示されているものでもありませんし、Automatorからコードを実行した結果表示されているものでもありません。ターミナル.appやAutomatorとはまったく無関係です。 Automatorでimport pyautoguiを実行できなかった原因は、ターミナル.appで使っているPythonとは別のPythonを、Automatorでは使っていたためです。同様に、ターミナル.appで使っているPythonとは別のPythonを、Visual Studio Codeでは使う設定になっているために、Visual Studio Codeのエディタ画面で "Import "pyautogui" could not be resolved〜" という警告文が表示されています。 Visual Studio Codeのウィンドウの一番下に紫の帯があって、その左端に、Pythonのバーションが表示されていると思います。これをクリックすると、「インタープリターを選択」というポップアップメニューがウィンドウの上部に表示されます。これはVisual Studio Codeで使用するPythonのバージョンを選択するものです。ここで先程の sys.executable='/Users/xxxx/xxxx/bin/python3' で表示されたのと同じPythonを探して、それを選択してください。エディタ画面の警告文は消えるはずです。 ③質問文にsendlist_V5.pyの全文を追記してください。その上で、「pyautogui.hotkeyショートカットキーを入れるのですが、挙動が確認でき」ないということについて、コードに即して何が問題なのか(期待している動作とどう違うのか)を説明してください。
hAmUgt

2021/10/24 01:17

②"インタープリターを選択する"で解決しました!ありがとうございます! ③追記しました Chromeを立ち上げて、アドオンのショートカットキーを入れるものなんですが ターミナルから起動→Googleを開く→アドオンのショートカットが作動する。 Automatorから起動→Googleを開く→アドオンのショートカットが作動しない。 となります
etherbeg

2021/10/24 03:49 編集

多分私のChromeには同じアドオン(拡張機能?)は入ってないと思うので(そもそも何のアドオンか分かりませんが)、単純に「タブを閉じる」というショートカットキーに置き換えて、私の環境で試してみました。 pyautogui.hotkey("command", "w") ①元のコードのままだと、ターミナルからもAutomatorからも、タブは閉じられませんでした。 ② time.sleep(2) を pyautogui.hotkey("command", "w") の前に持ってきてみたところ、ターミナルからはタブは閉じられましたが、Automatorからはタブは閉じられませんでした。 ③ time.sleep(2) を time.sleep(3) に変えた上で pyautogui.hotkey("command", "w") の前に持ってきてみたところ、ターミナルからもAutomatorからもタブは閉じられました。
hAmUgt

2021/10/24 06:19

同じくpyautogui.hotkey("command", "w")で試してみたんですが、①も②もタブを閉じる動作を確認したのですが③に関してはやはりターミナルではタブが閉じて、Automatorでは閉じませんでした…
etherbeg

2021/10/24 09:27

time.sleep(10) ぐらいに長めに変えて試してみてはいかがでしょうか
hAmUgt

2021/10/24 15:12

やはりAutometorでは動作が確認できませんでした…
etherbeg

2021/10/25 00:30

システム環境設定の「セキュリティとプライバシー」でAutomatorにコンピュータの制御を許可してあるでしょうか
hAmUgt

2021/10/25 02:16

アクセシビリティ・フルディスクアクセス・ファイルとフォルダ・と確認したのですが問題なさそうだったのですが!!! ありました!!! プライバシータブのオートメーションの項目でターミナルのチェックが外れており、ここにチェックを入れてAutometorで起動したところ、期待してた動きをしてくれるようになりました!!! 本当にありがとうございます!!!!! 何度も何度も丁寧な助言をいただき、感謝に堪えません…(৹ᵒ̴̶̷᷄﹏ᵒ̴̶̷᷅৹)
guest

0

まとめ
そもそもタイトルが間違っていましたすみません。。。

✕ autometorのシェルスクリプトで起動したい
○ autometorが思ったように動かない

autometorを起動させることはできるのですが、autometorで起動させたシェルスクリプトの中にあるpyautoguiが何故か動かないという状態を解決したくて質問しました

今回の場合の解決方法
システム環境設定→セキュリティとプライバシー→アクセシビリティ→該当Autometorの名前にチェックを入れる

解決。

…。
灯台下暗しというか…思ってもいないところに解決方法がありました…
etherbegさん、長く質問に付き合っていただき、本当に。本当にありがとうございました

スミマセンデシタ…

投稿2021/10/25 09:40

編集2021/10/25 09:43
hAmUgt

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問