从cmd调用脚本和从计划任务调用脚本之间的区别

时间:2013-01-30 15:19:32

标签: python windows scheduled-tasks

我正在尝试在我的计算机启动时执行我用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 shell执行此脚本时,它确实有效:我的文件被下载,文件夹被创建并且我的文件被复制到其中。但是,如果我从计划任务(权限:系统)调用此脚本,则不会执行任何操作,并且Last Result字段设置为0xfffff

基本上,从cmd shell调用此脚本与计划任务之间有什么区别?我在这里可以注意到的唯一区别是启动脚本的用户。使用cmd shell时,当前用户正在执行该脚本,而在由计划任务调用时,系统正在执行该脚本。但我没有看到任何理由为什么我的脚本在系统调用时不起作用...

我遵循了Caspar的建议,得到了以下结果:

  • 输出计划任务的结果会出现[Errno 13] : Acces Denied错误。我检查了我要将文件复制到的文件夹的权限,并将SYSTEM设置为“所有权限”。这是我的追踪:

    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?有没有办法让“他”?

1 个答案:

答案 0 :(得分:0)

我认为有两种主要方法。更具建设性的方法是确保捕获错误消息,因此首先需要将所有输出重定向到文件。

您可以尝试解决问题的方法是更改​​目标文件夹的权限/所有权并将其放松。你想采取哪种方式?

看起来非常清楚,程序“IzNoLo.exe”没有设置全局执行权限。说实话,我不知道那个程序做了什么,但也许你知道它,它是你提供的东西吗?

要设置这些[权限],您可以浏览属性面板,特别是安全面板,并确保为所有用户设置所有权限。