1

現在、コンピューターの起動時に Python で記述した (そして exe にコンパイルした) スクリプトを実行しようとしています。このスクリプトは、ファイルをダウンロードして、コンピューターの指定した場所にコピーするだけです。ここに私が使用しているコードの一部があります:

def DownCopy(url,dst):
    import shutil

    """ Download and copy file """
    fn = os.path.basename(urllib.url2pathname(url))
    filename, unused = urllib.urlretrieve(url,fn)


    #if remote file change set exec permission
    if filename != url and not url.startswith('file:///'):
        os.chmod(filename, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)

    #check if target directory exist, if not create it
    dstDir = os.path.dirname(dst)
    if not os.path.exists(dstDir):
        os.mkdir(dstDir)

    #copy
    shutil.copy(filename, dst)

シェルを使用してこのスクリプトを実行するcmdと、機能します。ファイルがダウンロードされ、フォルダーが作成され、ファイルがそのフォルダーにコピーされます。ただし、スケジュールされたタスク (権限: システム) からこのスクリプトを呼び出すと、何も起こらず、Last Resultフィールドは に設定され0xfffffます。

基本的に、このスクリプトを cmd シェルから呼び出す場合とスケジュールされたタスクから呼び出す場合の違いは何ですか? ここで気付く唯一の違いは、スクリプトを起動するユーザーです。cmd シェルを使用すると、スクリプトは現在のユーザーによって実行されますが、スケジュールされたタスクによって呼び出されたときにシステムによって実行されます。しかし、システムによって呼び出されたときにスクリプトが機能しない理由はわかりません...

Caspar のアドバイスに従い、次の結果が得られました。

  • スケジュールされたタスクの結果を出力すると、[Errno 13] : Acces Deniedエラーが発生します。ファイルのコピー先のフォルダーのアクセス許可を確認したところ、システムは「すべての権限」に設定されています。これが私のトレースです:

    Traceback (most recent call last):
      File "<string>", line 58, in <module>
      File "<string>", line 51, in Main
      File "<string>", line 30, in DownCopy
      File "Z:\home\user\workspace\repo_config_os\temp-DwIWiG\build\pyi.win32\pyinstaller_build_all\out08-PYZ.pyz\urllib", line 93, in urlretrieve
      File "Z:\home\user\workspace\repo_config_os\temp-DwIWiG\build\pyi.win32\pyinstaller_build_all\out08-PYZ.pyz\urllib", line 243, in retrieve
    IOError: [Errno 13] Permission denied: u'IzznoLo.exe'
    

したがって、問題はダウンロード部分にあるようです。ネットワークは SYSTEM に対して制限されていますか? 「彼」を許可する方法はありますか?

4

1 に答える 1

0

主なアプローチは2つあると思います。より建設的な方法は、エラー メッセージを確実にキャッチすることです。まず、すべての出力をファイルにリダイレクトする必要があります。

問題を解決するためにできることは、宛先フォルダーのアクセス許可/所有権を変更して緩めることです。あなたはどちらの道を歩みたいですか?

プログラム「IzNoLo.exe」にグローバル実行権限が設定されていないように見えます。正直なところ、そのプログラムが何をするものなのかはわかりませんが、ご存知かもしれませんが、それはあなたが提供するものですか?

これらの [権限] を設定するには、プロパティ パネル、特にセキュリティ パネルを参照し、すべてのユーザーに対してすべての権限が設定されていることを確認します。

于 2013-01-30T17:22:43.727 に答える