之前的一篇文章中,O哥介绍了如何使用批处理文件来在虚拟环境中执行指定的Python程序,这样就可以实现一键调整指定目录内的图片大小等功能。
(图源 :pixabay)
在最终完成这个调整图片大小的功能后,O哥觉得意犹未尽,因为批处理实在是太好玩了。重拾批处理,让我恍如回到几十年前,重回那些通过autoexec.bat调戏同学们的时光中。
不过时间是回不去了,其实不光批处理,C语言、VB、PHP+MySQL、Python,哪个不曾带给我无限的新奇和惊喜,当年为了一段程序真的可以废寝忘食不眠不休的。
哎,好汉不提当年勇了,何况本就不是什么好汉,话说重拾批处理后,我发现还可以用批处理来解决日常电脑使用中另外一个问题,那就是进入到Python虚拟环境中。
你可能会说,等等,之前都不是实现在虚拟环境中运行Python程序了吗?这两者不都一样吗?好吧,其实差不多,但是区别还是有一点点的,之前实现程序大致思路如下:
- 进入虚拟环境
- 运行程序
- 退出
那么是不是只要第一步就可以啦?答案是否定的,或者说并非那么简单。我们这次要做的是停留在命令行窗口,但是之前脚本中的操作,并没有给我们机会停留或者回到命令行窗口。
来看之前操作时的一个截图:
这个看起来似乎是停留在命令行窗口了,但实则不然,这里并没有出现命令行提示符,也没有允许我们输入内容的光标,所以这其实只是一个暂停而已。
上述暂停是通过pause
指令实现的,我们可以通过help
指令来查看命令行窗口下支持的各种指令(DOS命令?),比如这是其中一部分:
所以我们要的,不单单是暂停,而是让批处理程序回到命令行状态。
但是我研究了好久,也没研究出来,如何让它回到命令行状态。那要怎么办呢?思来想去,既然无法回到命令行状态,那么就反其道而行之,重新进入命令行状态好了。
进入命令行很简单,只需在批处理文件中添加cmd
指令,就会打开命令行窗口。但是问题又来了,我们不但要进入命令行,还要进入到虚拟环境呢?
这样写是否可行呢?
cmd
call E:\study\.venv\Scripts\activate
答案是不可以的,上述脚本首先进入到一个命令行窗口,并停留在窗口。只有这个窗口退出后,才会执行call
语句,然后call
语句执行完毕后,进入到Python虚拟运行环境,然后立即退出。
我们可以在上述脚本最末尾加上pause
语句,来进行一下调试:
可见当cmd
打开窗口后,并没有往下执行;我们敲入exit
指令退出cmd窗口后,call
语句被执行,然后进入到Python虚拟运行环境,然后等待我们的下一条指令而不是停到命令行提示符。
好吧,写了这么多,那么到底有没有什么办法呢?当然是有的,代码如下:
@cmd /K "E:\study\.venv\Scripts\activate && color 17 && E: && cd E:\study"
执行后直接进入到Python虚拟运行环境并停留在命令行窗口,效果如下:
将上述文件保存为venv.bat或者随便什么你喜欢的名字,放到桌面上,鼠标一点,就可以即刻进入到Python虚拟运行环境中了,省却了一大堆繁琐的步骤。
上述代码有几个知识点,简单扼要地说明一下:
@
用来抑制回显,相当于在语句前输入@echo off
一样,但是@
只作用到当前语句,不一样后续语句。cmd
命令行提示符指令,通过这个指令启动命令行提示符。/K
上述指令的参数之一,其作用是执行后续指令后保持窗口不退出。""
双引号的作用是把一堆指令作为指令集传给cmd
执行。&&
用来连接指令,和&
类似,但是&&
要求前边的指令被正确执行才会执行后续指令- 其它进入虚拟环境呀,设置颜色啊,切换盘符呀,进入目录呀,就不用多说了
所以别看只是小小的一句指令,但是说道还真不少呢!不过还好我搞定了它,嗯,爽歪歪呀,每天又可以节省几秒时间啦。