使用 bat 批处理运行 python
最近实习处理数据,在一个工作流里面需要同时使用到 python2 和 python3,这样我就不能使用一个 main 文件把所有步骤串起来一键执行,多了很多人工操控的步骤。
bat 打开了新世界的大门。
这篇笔记讲讲用到的基本 bat 语法,以及如何使用它来把 python 程序串起来。
bat 基本语法
在此之前,大概解释一下。bat 就是批处理程序(不确定是不是可以在 linux 上运行)。
bat 注释
在一行代码前面加上Rem
就代表注释,类似 python 中的 #
。
使用示例
Rem Echo test
打印到控制台
在需要打印的文字前面加上ECHO
就代表打印,类似 python 中的 print
。
需要注意的是,bat中的字符串是不需要引号的。
使用示例
ECHO The best language of world is Python.
申明变量
使用set
来申明变量。
比如申明一个名为list
的数组
set list=1 2 3 4
set list=beijing shanghai changsha
FOR循环
使用示例。打印list
数组中的每一个元素。
For %%A IN (%list%) DO (
Rem 这里开始是循环体
ECHO %%A
)
使用 bat 来执行 python 程序
其实就是平时我们在命令行运行 python 程序一样。
python test.py
python2 test.py
python3 test.py
如果要指定 python 解释器,那就带上解释器的完整路径。比如
C:\Users\ivy\anaconda3\python.exe test.py
(当然,python 程序也可以是完整路径。其实建议使用完整路径,不然 bat 里还要切换工作目录,比较麻烦。)
给 python 程序传参数
首先,python 程序里面要设置接收参数。这个使用 sys 包就可以做到。
import sys
print(sys.argv[1]) # 第一个参数 (第0个参数是 python 文件路径)
print(sys.argv[2]) # 第二个参数
然后,在 bat 里直接在命令后加上对应的参数就好
C:\Users\ivy\anaconda3\python.exe test.py 参数1 参数2
完整示例
@echo off
Rem 申明 list 数组
set list=beijing shanghai changsha
Rem 循环 list 数组
For %%A IN (%list%) DO(
C:\Users\ivy\anaconda3\python.exe test.py %%A
c:\Python27\ArcGIS10.7\python.exe test2.py %%A
ECHO *********** %%A done ****************
)
Rem 循环完不要直接退出程序,等待 check 一下
pause