我目前正在 WSL 中使用一个代码,该代码通过 WSL 窗口中的可执行文件模拟某些内容。要编辑此可执行文件的参数(即我希望模拟运行多长时间),我使用 Notepad++。我目前有兴趣为几百张这种模拟图像创建一个动态 gif,显然不用说,每次可执行文件完成时手动编辑 Notepad++ 代码(时间参数、创建/命名用于保存模拟文件的新目录等)将非常耗时。
所以我想知道是否有方法可以自动化这个?我想方法应该是这样的:
- 当可执行文件完成后,它会使用更新的 Notepad++ 文件自动再次运行。
- 然后,Notepad++ 文件必须知道要更新哪些参数、要增加多少时间步长、如何重命名新目录(可能通过一些“++”)。
我假设没有办法真正链接这些过程,所以也许在 Notepad++ 文件更新时还需要有时间延迟,以便有足够的时间让 WSL 可执行文件完成,然后再次进行此过程?
答案1
最终,这将需要某种程度的脚本/编程。如果我完全弄错了,请原谅我,但听起来你似乎没有太多的编程经验。
从高层次来看,该脚本可能会:
- 以某种循环方式操作
for
,重复“x”次(您提到“几百次”)。 - 为输出创建目录
- 每次运行修改或创建配置文件
- 使用该配置文件运行模拟
我假设每次运行的参数都会遵循某种数学模式,可以根据运行的“次数”计算出来?例如,也许:
- 每次运行一个参数增加 3
- 另一个参数每运行 3 次才会增加
- 最后一个参数在 0,1,2 (mod 3) 之间循环
那么你的脚本可能看起来像这样:
#!/usr/bin/env bash
# Starting values for first run
SIM_ARGX_START=1757
SIM_ARGY_START=8
for ((sim_num=0 ; sim_num < 200 ; sim_num++ ))
do
mkdir "sim${sim_num}"
SIM_ARGX=$(( $SIM_ARGX_START + ($sim_num * 3) ))
SIM_ARGY=$(( $SIM_ARGY_START + ($sim_num / 3) ))
SIM_ARGZ=$(( $sim_num % 3 ))
cat << EOF > "sim${sim_num}/config"
[simparams]
ARGX=$SIM_ARGX
ARGY=$SIM_ARGY
ARGZ=$SIM_ARGZ
OUTPUT=sim${sim_num}/
other paramaters ...
EOF
simprogram --config "sim${sim_num}/config"
done
这会将一个假设的配置文件写入 200 个不同的目录中,sim0
并针对它sim199
运行simprogram
。
当然,我不知道您的特定模拟需要什么参数或配置文件,所以这些都是假设的。
脚本或程序实际上可以用任何编程语言编写。只是 shell 脚本非常擅长自动化这类事情。但是,如果你 (a) 没有编程背景并且 (b) 正在运行模拟(尽管未指定),那么我建议你最好学习 Python,因为它经常用于数学和科学。