如何在batch脚本中嵌入python代码
老板叫我帮他测一个命令在windows下消耗的时间,因为没有装windows那个啥工具包,没有timeit那个命令,于是想自己写一个,原理很简单:
REM timeit.bat echo %TIME% call %* echo %TIME%
然后两个时间减一下就可以了,但是总是自己去减始终不方便,最好能直接算好打印出来。
因为涉及到时间格式的解析,时间的运算,在batch下比较困难,自然就想到了python或者perl脚本,这里首先想到的是python的-c参数:
REM timeit.bat set t1 = %TIME% call %* set t2 = %TIME% python -c "some python code to compute the time elapsed"
但是,由于计算的代码会比较复杂,直接放在一行上非常难写,也非常难读,最好能分多行写python代码,我们知道bash中有个heredoc,结合python的 “-” 参数:
# test.sh echo this is a bash script python - <<EOF import math print "this is python code" print math.pi EOF
无奈,batch并不支持heredoc,所以在要在batch中实现这个,用到一个非常magic的方法:原理就是我的脚本既是合法的batch,也是合法的python,然后在batch运行的最后用python调用自身:
1># : ^ ''' set t1 = %TIME% call %* set t2 = %TIME% python %~f0" exit /b rem ^ ''' import os import datetime # python code to compute the time elapsed print "Time Elapsed: xxx"
具体解释可以看这个问题:http://stackoverflow.com/questions/17467441/how-to-embed-python-code-in-batch-script
注意第一行奇怪的语法只是为了把第二行合法的移到第一行,从而避免三个单引号这个非法命令调用出现在batch中。
完整的timeit的实现在这里:https://github.com/lzprgmr/privaterepo/blob/master/tools/Batch/timeit.bat
最后,当然有人会说为什么不直接写一个py然后在batch中调用 - 这当然可以,但我想尽量保持一个功能在一个脚本中,这样看起来整洁,给别人用拷来拷去也不容易出错。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?