我正在尝试在我的计算机启动时执行我用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?有没有办法让“他”?
答案 0 :(得分:0)
我认为有两种主要方法。更具建设性的方法是确保捕获错误消息,因此首先需要将所有输出重定向到文件。
您可以尝试解决问题的方法是更改目标文件夹的权限/所有权并将其放松。你想采取哪种方式?
看起来非常清楚,程序“IzNoLo.exe”没有设置全局执行权限。说实话,我不知道那个程序做了什么,但也许你知道它,它是你提供的东西吗?
要设置这些[权限],您可以浏览属性面板,特别是安全面板,并确保为所有用户设置所有权限。