配置點擊就能運行Python程式的bat批處理腳本
- 2019 年 10 月 10 日
- 筆記
0,需求說明
在編寫和調試程式時,一般我們會在集成編輯環境里寫程式碼和運行,但如果程式比較完善需要快速運行,或者讓同事在其他電腦上快速運行時,再打開IDE(Integrated Development Environment , 集成開發環境)運行就有些麻煩了,對方也不一定很熟練使用命令行進行運行,因此在Windows下要解決這個問題一般有兩種思路:1,把程式編譯為exe文件,就是一個小軟體,和QQ等軟體的運行方式基本無差別,通過滑鼠點擊運行;2,另外的做法是編寫批處理文件,點擊批處理文件就會按順序執行命令行(在其他電腦運行是需要保證對方正確安裝了編程/編譯環境,例如是運行Python程式需要安裝好Python、Java程式需要安裝好JDK並配置好環境變數)。
Windows下的批處理文件後綴是.bat;點擊該文件就可以執行。
.bat文件是可執行文件,由一系列命令構成,其中可以包含對其他程式的調用。
下面具體說明通過bat批處理文件實現點擊執行Python程式碼。
1,編寫Python程式
如果本身程式比較完備了,這步跳過,下面新建一個超經典的hello world作為例子,選定一個文件夾然後新建一個文本文件,寫入 print("hello world")
。保存文件名為hellopy,把文件後綴從.txt改為.py
2,編寫批處理腳本
同樣新建文本文件,輸入 python hellopy.py
。保存為helloshell,後綴是.bat。然後點擊helloshell.bat就可以看到黑色的命令行窗口一閃而過,這是因為運行後cmd會自動關閉,因此為了看效果可以考慮用time.sleep(10)或選擇運行程式後新建一個文件以顯示程式正確運行了,以採用sleep的方案為例,把hellopy.py中的程式碼改為:
import time print("hello world") time.sleep(5)
其中`time.sleep(5)` 表示程式運行到這一行會休眠5秒。
完成上述步驟後有兩個文件如圖:

需運行的程式和批處理文件
點擊運行:

4,點擊運行jupyter notebook導出的程式
以上步驟已經實現了基礎需求,繼續讓例子更有針對性,在數據科學實踐中,大家喜歡用Jupyter notebook進行運行和調試,但是有些常規需求我們不想再打開notebook一個個cell點擊運行,想之間點擊一下就自動化處理excel,這個需求就改一下bat文件就好,首先把jupyter notebook中能夠正常運行的程式導出為py文件,在工具欄的File->Download As->Python(.py) 下,例如以下程式碼,讀取一個Excel,對Excel進行處理後把數據框(DataFrame)的數據保存到一個Excel里。

在File->Download As->Python(.py)中導出Python文件using2019fords.py,然後把bat文件中的內容更新為 python using2019fords.py
。點擊運行就可以。
5,把bat文件放桌面
把bat移到桌面,運行更方便,程式和數據仍然在特定文件夾下,這時候可以直接寫 python d:/文件夾路徑/python文件名.py
,保存後運行就可以。

另外就是按照cmd的步驟寫,先定位到目標文件夾下,然後是 python文件名.py
。

在桌面運行bat文件例子
6,運行bat中傳參數
一般比較推薦把參數寫入Python程式里,但也可以在批處理文件中傳參數。bat中的語法是 python文件名.py參數1參數2
。
對應的Python文件中接受參數的程式碼為(using2019fords.py仍為jupyter notebook中導出的文件):
# coding: utf-8 # In[1]: import time import pandas as pd # In[2]: import sys print("當前運行腳本:", sys.argv[0]) print("運行時間:",time.localtime(time.time())) # for i in range(1, len(sys.argv)): #有哪些參數 print("參數{0}為:{1}".format(i, sys.argv[i])) #對參數進行處理 wp=r"J:LinuxLearncixinliuclickToRunBat" adf=pd.read_excel(wp+"/hellodata.xlsx") # In[7]: adf.head(2) # In[ ]: #對讀入的表進行邏輯處理 # In[4]: adf['D']=adf["C"].apply(lambda x:x*2) # In[6]: adf.to_excel(wp+"/out_hellodata.xlsx")#輸出 print("finish") time.sleep(5)
運行效果如下:

另外可能會遇到的需求是程式碼比較固定了,需要每天定時運行程式讀取文件更新數據、發郵件等,定時運行的做法可以參考 定時運行Python程式。
Linux
用Linux的同學大部分都習慣於直接寫命令行了,語法和Windows下的一致,首先定位到Python程式所在的目錄下,然後用 python maincode.py
運行。在Linux和Mac下的批處理文件文件後綴是.sh 。下面是一個運行的具體例子,Python程式仍然用前面說的hellopy.py。

Ubuntu下運行sh文件例子