通过命令行和计划任务调用脚本的区别
我现在正在尝试在我的电脑启动时执行一个用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] : Access 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'
所以问题似乎出在下载的部分。系统在网络方面是不是有什么限制?有没有办法让“他”可以访问?
1 个回答
0
我觉得有两种主要的方法。比较有效的方式是确保你能捕捉到错误信息,所以首先你需要把所有的输出重定向到一个文件里。
你可以尝试通过改变目标文件夹的权限或所有权来解决这个问题,放宽一些限制。你想选择哪种方式呢?
看起来这个程序 "IzNoLo.exe" 没有设置全局执行权限。老实说,我不知道这个程序具体是干什么的,但也许你知道,它是你提供的吗?
要设置这些[权限],你需要查看属性面板,特别是安全面板,确保所有用户的权限都设置好。