我一直在寫的Python腳本,我想計劃的基礎上在Windows服務器上自動運行。我嘗試了很多簡單的批處理文件,但是卻熱心地轉向Python腳本,並且對它們做的很好。我編寫的腳本很容易編寫,而且當我手動執行它們時,它們正是我想要它們執行的操作。我現在寫了許多不同的腳本,主要處理複製,刪除和重命名文件或移動目錄。爲什麼通過Windows任務計劃程序啓動時看似有效的Python腳本無法運行?
的問題是,當我嘗試使用Windows任務計劃程序安排Python腳本,其中許多無法運行(任務計劃說「上次運行結果=爲0x1」)。這事兒常常發生。我也有類似的批處理文件的經驗(批處理文件,可以手動運行時,預定運行時無法運行)。鑑於迄今爲止我的經驗有限,我不得不說這肯定是Windows任務計劃程序問題,而不是Python問題。
下面是一個例子Python腳本:從一個服務器到另一個經由聯網的文件夾(:分區表示爲X)
#import modules
import os, shutil, datetime, subprocess
#global variables
zip_dir = 'Y:\7z'
zip_dir_misc = 'X:\7z'
zip_extension = '.7z'
def newest_zip_file(directory, extension = zip_extension):
return max(
(os.path.join(dir_name, file_name)
for dir_name, dir_names, file_names in os.walk(directory)
for file_name in file_names
if file_name.endswith(extension)),
key=lambda fn: os.stat(fn).st_mtime)
def copy_zip_file(src_dir_p, temp_dir_p):
src_file = newest_zip_file(src_dir_p)
new_file = temp_dir_p + '\\' + os.path.basename(src_file)
shutil.copyfile(src_file, new_file)
copy_zip_file(zip_dir, zip_dir_misc)
此腳本副本.7z壓縮文件。此腳本在手動運行時工作,但在計劃時不運行。然而,當劇本更改爲同一.7z壓縮文件複製到同一臺服務器(不是網絡文件夾)上的另一目錄,該腳本將工作得很好,無論是在手動執行或計劃。
如果我在上面的腳本中以編程方式做了一些不正確的事情(也許我指的是不正確的網絡文件夾),那麼我可以修復這個腳本一次(儘管我已經嘗試了每個組合都可以想象定義網絡使用諸如完整服務器名稱之類的文件夾)。但是我仍然遇到了完全不同的Python腳本的相同問題,這些腳本的行爲方式相同,這使我想到了真正的問題:
爲什麼看起來有效的Python腳本在通過Windows任務計劃程序啓動時無法運行?
我的Windows任務調度程序配置:
- 用戶運行是否登錄或不
- 直接稱爲最高權限
- 操作(Python腳本)運行(啓動程序:abc.py) ,沒有作爲參數發送給Python.exe,儘管我已經多次嘗試了Python.exe方法。我不相信任何一種方法都比另一種更好(只要執行計劃任務),所以我只是直接調用腳本。
我找多爲建議和解決這個普遍問題的最佳做法,並沒有那麼多具體的修復上面張貼的示例腳本。
你使用IDLE嗎?我知道我必須將IDLE設置爲使用Task Scheduler時以管理員身份運行。 – JasonBK
沒有。我當時沒有使用IDLE,但我仍然不使用它。我不認爲這應該是一個要求。 – nairware