質問: クラウド上に建てたwindows内でpyautoguiを使って作業を自動化しようとしているのですが、リモート接続でログインしたセッション上でpyautoguiを起動しても、実行中にリモート接続を解除(切断)するとpyautoguiの処理が動かないかエラーで終了します。 コード↓ ``` import time import pyautogui as pg pg.hotkey('alt', 'tab') #ここと for i in range(10): pg.press(str(i)) #この行の処理が実行されない time.sleep(1) ``` リモート接続を切断してもpyautoguiの実行を継続できるようにするか、あるいはリモート接続していない状態でpyautoguiを実行する方法はないでしょうか。 ■環境 Azure VM windows 10 python 3.9.7 PyAutoGUI 0.9.53
回答: リモート接続を「切断」している場合、「リモートコンピュータ上のプログラムは、接続を切断した後でも実行を続けます。」とありますが、実際にはこれらのIssueやpywinautoのドキュメントによるとRDPのセッションでは切断するとGUIの自動化作業は失敗するようです。 Windows: if you remote desktop into the PC and exit the remote session, pyautogui doesnt work #34 Unable to run pyautogui scripts from remote headless server, I can run them fine from the linux machine #87 Roadmap: Remote/headless desktops #133 開発テーマとしてのIssueは立っていますが、実現には至っていないようです。 Remote Execution Guide - pywinauto > > **Windows Remote Desktop features** > > Remote Desktop (RDP) provides virtual active desktop to remote machine with Windows OS. There are 2 potential issues: > > > * If RDP window is minimized, there is no active desktop on remote PC by default. > * If RDP is disconnected, the desktop is locked out. > > > In both cases any GUI automation jobs will fail (if you don’t use some tricks described below). The workarounds are well described in TestComplete documetation: > > > * Running Tests in Minimized Remote Desktop Windows > * Disconnecting From Remote Desktop While Running Automated Tests > > > 以下のような手段が考えられるでしょう。他にもあるかもしれませんが、それらも含めて実験が必要と思われます。 * Windowsイメージを2つ立ち上げ、pyautoguiを実行するマシンにもう一方からログインし続ける : pyautogui#34のコメントにあったもの * 切断しても問題の無い別のリモート接続ソフトを使う + Terminals-Origin/Terminals : pyautogui#34のコメントにあったもの + VNC Server software : pywinautoのドキュメントにあったもの + pyautogui#133の記事にあった実験的な何かを使ってみる 追記: ちなみに「リモート接続していない状態でpyautoguiを実行する」場合に何をトリガーにするかの目論見はありますか? 接続していないのだから、何かしらの人の作業に依存するものでは無い感じですが。 例えばこんなQ&Aと記事があり、VMを自動ログオンに設定し、そのログオン時のスタートアップフォルダへ登録するか、タスクスケジューラに登録することにより、プログラムやスクリプトが実行されるようにする方法が考えられます。 I need to be in complete control of VM > > The other option is to configure automatic logon > > > > and use a script or Task Scheduler to start up your application. > > > 上記参照先の日本語版 デバイスで自動ログオンを有効Windows 自動起動(と自動実行?)の設定例記事 Azure VMを自動起動させてみた