配置點擊就能運行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文件例子