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)

当我使用 shell 执行这个脚本时cmd,它确实有效:我的文件被下载,文件夹被创建,我的文件被复制到其中。但是,如果我从计划任务(权限:系统)调用此脚本,则不会发生任何事情,并且该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 的网络类型是否受到限制?有没有办法允许“他”?

4

1 回答 1

0

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

您可以尝试解决问题的方法是更改​​目标文件夹的权限/所有权并将其放宽。你想走哪条路?

看起来很明显,程序“IzNoLo.exe”没有设置全局执行权限。老实说,我不知道那个程序是做什么的,但也许你知道,它是你提供的吗?

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

于 2013-01-30T17:22:43.727 回答