首先安装好anaconda Distribution | Anacondahttps://www.anaconda.com/download
其次配置好环境变量,增加
C:\ProgramData\anaconda3\Library\bin\
写一个runit.bat ,用于激活环境并调用run.bat
@echo off
conda activate base && run.bat
echo on
run.bat内容
cd /d C:\DataMining
python main.py
当然也可以直接写成一个runit.bat,如下
@echo off
conda activate base && cd /d C:\DataMining && python main.py
echo ok
然后脑洞大开,连环境变量也可以自动加到bat中,如下
@echo off
set PATH=%PATH%;C:\ProgramData\anaconda3\Scripts;C:\ProgramData\anaconda3\Library\bin
conda activate base && cd /d C:\DataMining && python main.py
echo ok
然后就用runit.bat就可以一路执行了,也可以将这个文件放到系统启动文件夹中实现开机自启动。
再改进一下,如果上面的bat重复执行就会出问题,我们再改进一下逻辑让之后启动的bat结束之前运行的python代码,如下
chcp 65001
echo "first run cmd ->Anaconda Prompt ->conda init"
echo off
echo 查找运行 main.py 的 python.exe 进程...
rem 使用 wmic 查找 python.exe 中包含 main.py 的进程
for /f "tokens=2 delims=," %%i in ('wmic process where "name='python.exe' and commandline like '%%main.py%%'" get ProcessId /format:csv ^| findstr /r "[0-9]"') do (
echo 发现运行 main.py 的 python.exe 进程,进程ID为 %%i
set pid=%%i
echo %pid%
taskkill /F /PID %pid%
echo 进程 %%i 已终止。
)
timeout /t 1 /nobreak >nul
rem 使用 wmic 查找 python.exe 中包含 main.py 的进程
for /f "tokens=2 delims=," %%i in ('wmic process where "name='python.exe' and commandline like '%%main.py%%'" get ProcessId /format:csv ^| findstr /r "[0-9]"') do (
echo 发现运行 main.py 的 python.exe 进程,进程ID为 %%i
set pid=%%i
echo %pid%
taskkill /F /PID %pid%
echo 进程 %%i 已终止。
)
rem 使用 wmic 查找 python.exe 中包含 main.py 的进程
for /f "tokens=2 delims=," %%i in ('wmic process where "name='pythonw.exe' and commandline like '%%main.py%%'" get ProcessId /format:csv ^| findstr /r "[0-9]"') do (
echo 发现运行 main.py 的 pythonw.exe 进程,进程ID为 %%i
set pid=%%i
echo %pid%
taskkill /F /PID %pid%
echo 进程 %%i 已终止。
)
timeout /t 1 /nobreak >nul
rem 使用 wmic 查找 python.exe 中包含 main.py 的进程
for /f "tokens=2 delims=," %%i in ('wmic process where "name='pythonw.exe' and commandline like '%%main.py%%'" get ProcessId /format:csv ^| findstr /r "[0-9]"') do (
echo 发现运行 main.py 的 pythonw.exe 进程,进程ID为 %%i
set pid=%%i
echo %pid%
taskkill /F /PID %pid%
echo 进程 %%i 已终止。
)
set PATH=%PATH%;C:\ProgramData\anaconda3\Scripts;C:\ProgramData\anaconda3\Library\bin
conda activate base && cd /d "%~dp0" && python main.py
echo ok
另外如果不想在控制台输出日志可以用pythonw替换python,代码如下 :
chcp 65001
echo "first run cmd ->Anaconda Prompt ->conda init"
echo off
echo 查找运行 main.py 的 python.exe 进程...
rem 使用 wmic 查找 python.exe 中包含 main.py 的进程
for /f "tokens=2 delims=," %%i in ('wmic process where "name='python.exe' and commandline like '%%main.py%%'" get ProcessId /format:csv ^| findstr /r "[0-9]"') do (
echo 发现运行 main.py 的 python.exe 进程,进程ID为 %%i
set pid=%%i
echo %pid%
taskkill /F /PID %pid%
echo 进程 %%i 已终止。
)
timeout /t 1 /nobreak >nul
rem 使用 wmic 查找 python.exe 中包含 main.py 的进程
for /f "tokens=2 delims=," %%i in ('wmic process where "name='python.exe' and commandline like '%%main.py%%'" get ProcessId /format:csv ^| findstr /r "[0-9]"') do (
echo 发现运行 main.py 的 python.exe 进程,进程ID为 %%i
set pid=%%i
echo %pid%
taskkill /F /PID %pid%
echo 进程 %%i 已终止。
)
rem 使用 wmic 查找 python.exe 中包含 main.py 的进程
for /f "tokens=2 delims=," %%i in ('wmic process where "name='pythonw.exe' and commandline like '%%main.py%%'" get ProcessId /format:csv ^| findstr /r "[0-9]"') do (
echo 发现运行 main.py 的 pythonw.exe 进程,进程ID为 %%i
set pid=%%i
echo %pid%
taskkill /F /PID %pid%
echo 进程 %%i 已终止。
)
timeout /t 1 /nobreak >nul
rem 使用 wmic 查找 python.exe 中包含 main.py 的进程
for /f "tokens=2 delims=," %%i in ('wmic process where "name='pythonw.exe' and commandline like '%%main.py%%'" get ProcessId /format:csv ^| findstr /r "[0-9]"') do (
echo 发现运行 main.py 的 pythonw.exe 进程,进程ID为 %%i
set pid=%%i
echo %pid%
taskkill /F /PID %pid%
echo 进程 %%i 已终止。
)
set PATH=%PATH%;C:\ProgramData\anaconda3\Scripts;C:\ProgramData\anaconda3\Library\bin
conda activate base && cd /d "%~dp0" && start "" pythonw main.py
echo ok