24

Windows タスク スケジューラを使用して定期的な Python タスクを設定しようとしています。

「python.exe」へのパスを入力し、スクリプトのパスをパラメーターとして Windows タスク スケジューラに提供すると、成功しました (下のスクリーンショットを参照)。

Windows タスク スケジューラ

ただし、スクリプトを実行する特定の仮想環境を選択できるようにしたいと考えています。私は venv についてあまり知識がなく、通常は cmd を開き、目的の仮想環境ディレクトリで Scripts\activate.bat を実行して使用します。

Windowsタスクスケジューラを使用して、「24時間ごとにvenvxxxでタスクxを実行する」を達成するにはどうすればよいですか?

4

7 に答える 7

8

上記の mx0 による回答は機能しているように見えますが、起動時にフラスコ Web アプリを実行するようにタスク スケジューラを設定しました。この場合、手動開始は正常に機能しますが、手動終了は機能しません。タスクを終了すると、仮想環境をセットアップする cmd.exe タスクが強制終了されますが、python.exe は引き続き実行されます。

私が見つけた解決策は、仮想環境のアクティブ化をスキップして python 実行可能ファイルを直接呼び出すこの reddit 投稿からのものでした。

path\to\venv\Scripts\python.exe path\to\script.py

これがどれほど堅牢になるかはわかりませんが、少なくともこの方法でタスクを終了すると python.exe が終了します

于 2018-08-09T20:16:10.037 に答える
0

Python スクリプトを起動するためのバッチ ファイルの作成は、プロセスの起動時には機能しますが、プロセスの停止時には機能しません。taskengine.exe がジョブの停止を決定すると、bat プロセスが強制終了され、Python.exe はそのまま残ります。

私見、最善の方法は、patch_conda_path sys.base_exec_prefixに基づいてos.environのPATHにパッチを当てるなど、ユーティリティモジュールを作成することです。
例えば

import is, sys
conda_base = sys.base_exec_prefix
subps = [";", "library\\mingw-w64\\bin;", "library\\usr\\bin;", "library\\bin;", "scripts;", "bin;", "condabin;"]
conda_paths = ""
for p in subps :
    _p = os.path.join(conda_base, p)
    if _p in os.environ["PATH"]:
        continue
    else:
        conda_paths += _p
os.environ["PATH'"] = conda_paths + os.environ["PATH"]

このモジュールをメイン スクリプトの最初にインポートします。、py スクリプト ファイル名、およびpy スクリプト フォルダーに設定しprogramます。task scheduler... conda path...\python.exeargumentsstart in

これは、conda3 のウェイトレスによって実行されるフラスコ スクリプトでも機能します。

于 2021-11-24T07:42:21.897 に答える