我目前正在尝试在计算机启动时执行我用 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 的网络类型是否受到限制?有没有办法允许“他”?