写Python脚本让带参数程序运行多次

仿真时,通常需要测量一个变量对另一个变量的影响,比如包数量对传输时间的影响,这就需要让程序根据不同的参数值依次运行。为了使结果更加客观,让同一个程序执行多次,取其平均值。本文给出一个实例,让程序在不同参数值下运行多次(可以挂机运行),得到数据,并绘成图。

1. Python源代码

我本意是测试传输n个数据包所需时间,这里只是简单测试程序运行的总时间,显然不准确。据说写脚本分析trace file(后缀名为.tr)才是常用方法,求指点。

for maxForward in range(2, 1000, 50):
  count = 0

  for i in range(0, 10, 1):
    start = time.time()
    os.system('./waf --run "scratch/AliceBob_class_main --flag=1 --maxForward=%d"' %(maxForward))
    end = time.time()
    elapsed = (end - start)
    count += elapsed

  count = count/10
  print >> open("result_AliceBob_XOR_100M_2.txt", 'a'), maxForward, count  

第一行类似于C语言for(maxForward=2; maxForward<1000; maxForward+=50),第二层for循环让程序运行10次。函数os.system运行程序(类似于命令行运行的命令),并传入参数。

2. 得到数据

用命令python python_AliceBob_class.py运行该脚本,即可得到一组数据,举例如下:

2 4.33108618259
52 4.32459049225
102 4.44101219177
152 4.45601665974
202 4.61485278606
252 4.60161876678
302 4.61147019863
352 4.63963832855
402 4.76935830116
452 4.84588670731
502 4.94689056873
552 4.90891900063
602 5.05824730396
652 5.1653026104
702 5.16471829414
752 5.19985570908
802 5.1322250843
852 5.21339273453
902 5.43519155979
952 5.51791219711

3. xgraph绘图

​​有了数据,就可以用xgraph等作图工具便把这些数据直观表示出来,考虑到命令太长,每次输入不方便,我写成shell脚本,源代码如下(可以用<<BLOCK *** BLOCK注释多行shell脚本):

#! /bin/sh
xgraph -t "A--R--B, without/with XOR" -x "packets" -y "runtime" -P result_AliceBob_Without_100M_2.txt result_AliceBob_XOR_100M_2.txt -geometry 800x400 &

这里-t, -x, -y分别是用来标识标题,x轴,y轴,得到的图形如下(本例得到的是两组数据,分别存在两个文件):

AliceBob_WithoutXOR_100M_2图1 xgraph示意图

注:网上几乎都说xgraph没有gnuplot好用。

Leave a Reply

Your email address will not be published. Required fields are marked *