2013-11-25 121 views
7

不知道是否有人遇到過這個問題,但我會爲疑難解答和/或替代方法提供建議。由Windows任務計劃程序運行python腳本的問題,它執行pscp

我有一個Windows 2008服務器上運行幾個計劃任務。其中一項任務是使用pscp登錄到Linux機箱,檢查新文件以及是否有新內容的python腳本,將它們複製到C:驅動器上的本地目錄中。我已經在關鍵點上對腳本進行了一些日誌記錄,我正在使用logging.basicConfig(level=DEBUG)

我使用變量command = 'pscp -pw xxxx [email protected]:/ c:\local_dir'構建了該命令,然後使用subprocess.call(command)執行該命令。

現在這裏是奇怪的部分。如果我從命令行手動運行腳本,它工作正常。新文件被下載和處理。但是,如果任務計劃程序運行腳本,則不會下載任何新文件。腳本在同一個用戶下運行,但是卻產生不同的結果。

根據腳本和linux框創建的日誌文件,該腳本成功登錄到linux框。但是,即使存在新文件,也不會下載任何文件。再次,當我通過命令行運行它時,會下載文件。

任何想法?建議,替代方法?

謝謝。

+0

感謝這些答案。事實證明你們都是對的。任務計劃程序有兩種方式很奇怪:第一種;它不喜歡映射驅動器。它適用於UNC參考。第二;它喜歡一切的完整路徑參考。文件,命令,腳本中的語法,一切。事實上,使用這兩種技術是我如何解決我的問題。現在我唯一的問題是決定哪個答案點擊正確,因爲這兩個工作。 – user1070061

回答

9

嘗試在Linux VM上打開MS Access數據庫時遇到同樣的問題。在Windows 7命令提示符下運行該腳本,但在Task Scheduler中運行該腳本沒有。使用任務計劃程序,它會查找數據庫並驗證它是否存在,但不會返回其中的表。

的解決方案是有任務計劃程序運行CMD與參數/C蟒蛇C中的程序/腳本:\路徑\爲\ script.py(下添加參數(可選))。

我不能告訴你爲什麼這個工程,但它解決了我的問題。

+0

工程就像一個魅力! –

+3

這對我也不起作用。我嘗試的每一件事,當我按下Run時,它什麼也不做。 > :(: – endolith

+0

每次執行腳本時我怎樣防止惱人的「taskeng.exe」窗口彈出(我的腳本每15分鐘運行一次)? – Danijel

1

我有類似的問題。在測試中,我發現任何具有子進程的調用都會在任務調度程序中運行時停止python腳本,但在命令行上運行時可以正常工作。

import subprocess 

print('Start') 
test = subprocess.check_output(["dir"], shell=True) 
print('First call finished') 

當在命令行中運行這個輸出:

Start 
First call finished 

當從任務調度運行輸出是:

Start 

爲了得到任務調度輸出我運行Python批處理文件如下:

python test.py >> log.txt 

我在命令行和任務調度程序中都通過批處理文件運行腳本。

1

布拉德的答案是正確的。子進程需要shell上下文才能工作,任務管理器可以在沒有這個的情況下啓動python。另一種方法是製作一個由任務調度程序啓動的批處理文件,該文件調用python c:\ path \ to \ script.py等。唯一不同的是,如果你遇到一個腳本有一個調用操作。getcwd()您將始終獲取腳本所在的根目錄,但當您從任務計劃程序調用cmd時會得到其他內容。

1

您可以使用Windows事件調度程序。添加一個動作,指定你的python文件運行「doSomeWork」,然後用包含文件的目錄填入Start in(可選)輸入。例如,如果你有一個python文件:

C:\ pythonProject \ doSomeWork.py

您可以輸入:

程序/腳本:doSomeWork.py

出發點(可選):C:\ pythonProjects

相關問題