MaDi's Blog

一個紀錄自己在轉職軟體工程師路上的學習小空間

0%

執行檔設定windows工作排程遇到的路徑問題

問題

Q: 為什麼py檔透過pyinstaller壓成exe檔之後,放到windows工作排程卻找不到路徑?

原因

原因是透過windows的工作排程去執行exe檔的時候,會預設從 C:\WINDOWS\System32 開啟,因為 Windows 工作排程器的程式就是放在 C:\WINDOWS\System32底下。

解決方法

程式碼中加入這個函式,作為獲取當前工作目錄的用途。

1
2
3
4
5
6
7
import os
import sys

#獲取當前工作目錄
def abs_path(rel_path):
absPath = os.path.split(os.path.realpath(sys.argv[0]))[0]
return os.path.join(absPath, rel_path)

1. os.path.realpath()

獲取path的真實路徑

1
2
3
4
path = './'
os.path.realpath(path)

'C:\\Users\\DysonMa\\Desktop\\myFile'

2. sys.argv[0]

sys.argv 用來表示從 command line 傳入的參數,sys.argv[0] 代表程式的名稱

1
2
3
4
sys.argv[0]  

#jupyter notebook裡面執行的結果
'C:\\users\\DysonMa\\appdata\\local\\programs\\python\\python38-32\\lib\\site-packages\\ipykernel_launcher.py'

若透過工作排程去執行,將會是 C:\WINDOWS\System32,解決問題!

3. os.path.split()

把路徑分割成 dirname 和 basename,返回一個元組

1
2
3
os.path.split(os.path.realpath(path))

('C:\\Users\\DysonMa\\Desktop', 'myFile')

4. os.path.join()

把目錄和文件合為一個路徑

1
2
3
os.path.join('C:\\Users\\DysonMa\\Desktop','myFile')

'C:\\Users\\DysonMa\\Desktop\\myFile'

補充

先在cmd內模擬windows工作排程再壓成exe!

不要急著用pyinstaller壓成exe,先開啟cmd,輸入python檔案路徑

這個做法可以模擬程式在windows排程的路徑,提早發現錯誤並加以修正!

1
python C://xxx.py

參考: