2

次のPythonスクリプト「Script.py」を確認してください。

import subprocess
src_directory = 'Z:\z_7z\Some_Directory'
zip_file_name = 'Test.7z'
cmd = ['7z', 'a', zip_file_name, src_directory, '-mx9']
subprocess.Popen(cmd, stderr = subprocess.STDOUT, stdout = subprocess.PIPE)

私の意図は、Windowsタスクスケジューラを使用してPythonスクリプトをスケジュールすることです。私は以前に他のPythonスクリプトを使用してこれを正常に実行しました。ただし、上記のスクリプトをスケジューリングで実行できません。これがWindowsタスクスケジューラの問題なのかPythonの問題なのかはわかりませんが、私が知っていることは次のとおりです。

上記の「Script.py」は、「Some_Directory」ディレクトリで7zip圧縮を実行するためのスクリプトです。スクリプト自体とそれが呼び出す7z.exeアプリケーションは、両方とも「Y:\z_7z」ディレクトリに保存されます。

手動で実行すると、スクリプトは正常に機能しているようです。スクリプトをダブルクリックすると、正しく実行されます。また、次のコマンドを使用して、コマンドラインからスクリプトを実行できます。

Y:\z_7z\Script.py

ただし、「C:\ Python27」ディレクトリに移動して次の手順を実行しても、スクリプトを手動で実行することはできません。

python Y:\z_7z\Script.py

これにより、次のエラーが発生します。

Line 5 in module subprocess.Popen(cmd, stderr = subprocess.STDOUT, ...)
WindowsError: [Error 2] The system cannot find the file specified

そのすべての情報を提供すると、私が抱えている本当の問題は、Windowsタスクスケジューラがこのスクリプトを実行できないことです(最終実行結果= 0x1)。次のような理想的な構成を含め、さまざまなWindowsタスクスケジューラの構成を試しました。

  • プログラム/スクリプト: "C:\ Python27 \ python.exe"
  • 引数を追加(オプション): "Y:\ z_7z \ Script.py"
  • ユーザーがログオンしているかどうかに関係なく実行

繰り返しになりますが、他のPythonスクリプトをスケジュールしましたが、その前に正常に実行されました。このWindowsタスクスケジューラタスクは正しく構成されているようです。私はいくつかのより高度な設定を閲覧しましたが、この特定のタスクに疑わしいものは何も見つかりませんでした。

4

1 に答える 1

3
  1. 起動するだけではありません7z。実行可能ファイルへのフルパスを指定します。

    cmd = [r'C:\ Program Files \ 7zip \ 7z.exe'、' a'、zip_file_name、src_directory、' -mx9']これC:\Program Files\7zip\7z.exeが実行可能パスであると考えると、機能します。

  2. pythonスクリプトを引数としてプロセスを実行しないようにしてください。Pythonスクリプト自体を実行します。

  3. あなたzip_file_nameは相対的です。引数がファイル名かどうかわかりません。それは道かもしれません。その場合、.7zファイルはに作成される可能性がありますC:\Windows\System32。これを修正するには、zip_file_nameフルパスに設定します。

于 2012-06-17T17:14:51.147 に答える