NS3 让你的仿真脚本运行在你想要的位置

需求:

仿真脚本一般放在scratch之下,但是随着仿真程序的增多,这个目录会变得越来越臃肿,于是产生建立子目录的想法.那么到底能不能建立子目录呢?在哪建立子目录更加合适呢?

解决方案:

直接看/ns3.20/wscript,这个文件夹我的理解是w:waf, script当然是脚本的意思,就是waf编译器会调用的仿真脚本.其中的一个片段:

def add_scratch_programs(bld):
    all_modules = [mod[len("ns3-"):] for mod in bld.env['NS3_ENABLED_MODULES']]
    for filename in os.listdir("scratch"):
        if filename.startswith('.') or filename == 'CVS':
	    continue
        if os.path.isdir(os.path.join("scratch", filename)):
            obj = bld.create_ns3_program(filename, all_modules)
            obj.path = obj.path.find_dir('scratch').find_dir(filename)
            obj.source = obj.path.ant_glob('*.cc')
            obj.target = filename
            obj.name = obj.target
            obj.install_path = None
        elif filename.endswith(".cc"):
            name = filename[:-len(".cc")]
            obj = bld.create_ns3_program(name, all_modules)
            obj.path = obj.path.find_dir('scratch')
            obj.source = filename
            obj.target = name
            obj.name = obj.target
            obj.install_path = None

程序注释:

不难看出,这个函数的功能是将scratch添加到编译的目录中,首先判断scratch下面的文件是文件夹还是目录,如果是.cc文件的话,就创建这个ns3的程序;如果是文件夹的话,直接以文件夹的名字创建ns3的程序,所以该子目录下的程序的名字应该和子文件夹的名字相同.这里的设计主要是为了将.cc和.h的文件放在一起,减少空间.

显然,如果我有很多.cc仿真脚本的时候,放在这里并不太合适,那么放在哪里呢? 不错,是examples文件夹. 请看下面一段程序:

def add_examples_programs(bld):
    env = bld.env
    if env['ENABLE_EXAMPLES']:
        for dir in os.listdir('examples'):
            if dir.startswith('.') or dir == 'CVS':
                continue
            if os.path.isdir(os.path.join('examples', dir)):
                bld.recurse(os.path.join('examples', dir))

程序注释:

这个是添加examples文件夹,如果该目录下的文件是文件夹的话,直接跳到该子目录下进行处理.再去它的子目录下看看wscript:

def build(bld):
    obj = bld.create_ns3_program('energy-model-example', ['core', 'mobility', 'wifi', 'energy', 'internet'])
    obj.source = 'energy-model-example.cc'

这里创建ns3的仿真程序.

我们类似创建目录,然后写个wscript就可以了.当然你还可以通过修改wscript,让你的编译更加自由.

附加,我的一次修改仿真脚本的经历:

有次运行程序, 忘记添加scratch目录了,比如直接运行first,但是运行的程序结果并不是我想要的,结果发现运行的是examples下面的子目录下面的.那么waf是怎么选择哪一个同名文件的呢,还是看wscript脚本:

def build(bld):

在上面这个函数中,有这样两句调用:

add_examples_programs(bld)
add_scratch_programs(bld)

发现examples文件夹下面的程序放在前面,试着调换这个顺序,再次运行就优先scratch下面的程序了.

参考:

我在谷歌ns3论坛上关于此问题的提问

waf的学习参考书waf book

NS3 让你的仿真脚本运行在你想要的位置

时间: 2024-08-08 22:10:59

NS3 让你的仿真脚本运行在你想要的位置的相关文章

注册表禁用Adobe软件的JavaScript脚本运行

参考:https://www.adobe.com/devnet-docs/acrobatetk/tools/AppSec/javascript.html Adobe软件的漏洞越来越多,如果新版本发布,我们不想或者限于条件无法更新,为了安全,我们可以关闭AdobeReader的JavaScript功能. 1.手动关闭JavaScript功能方法: 打开AdobeReader软件,在"编辑>>首选项"中,定位到"JavaScript",勾选掉右边的"

当脚本运行时如何改变脚本运行的当前目录

如果你希望在Windows Script Host 5.6 的脚本运行的时候需要修改脚本运行的当前目录,要建一个Wscript.Shell的对象,然后设置CurrentDirectory值的属性为你需要的目录.比如,以下两行将改变当前目录为c:\temp Set objShell = CreateObject("WScript.Shell")objShell.CurrentDirectory = "C:\Temp" 为了验证,复制这个脚本并保存到其他不是c:\tem

把Scala代码当作脚本运行

1. 在类UNIX系统上作为脚本运行 在类Unix系统上,你可以设置一个shell前导词来执行脚本.如下例: Script.scala #!/usr/bin/env scala !# println("Hello" + args(0)) 先输入chmod +x Script.scala,确保对Script.scala文件有执行权限.然后执行此文件,在命令行上输入./Script.scala Buddy——Buddy是传给脚本的参数. 输出如下: Hello Buddy 2. 在wind

Python脚本运行出现语法错误:IndentationError: unindent does not match any outer indentation level

[问题] 一个python脚本,本来都运行好好的,然后写了几行代码,而且也都确保每行都对齐了,但是运行的时候,却出现语法错误: IndentationError: unindent does not match any outer indentation level [解决过程] 1.对于此错误,最常见的原因是,的确没有对齐.但是我根据错误提示的行数,去代码中看了下,没啥问题啊. 都是用TAB键,对齐好了的,没有不对齐的行数啊. 2.以为是前面的注释的内容影响后面的语句的语法了,所以把前面的注释

基于sparksql调用shell脚本运行SQL

[Author]: kwu 基于sparksql调用shell脚本运行SQL,sparksql提供了类似hive中的 -e  , -f ,-i的选项 1.定时调用脚本 #!/bin/sh # upload logs to hdfs yesterday=`date --date='1 days ago' +%Y%m%d` /opt/modules/spark/bin/spark-sql -i /opt/bin/spark_opt/init.sql --master spark://10.130.2

LoadRunner同一个脚本运行两次结果相差很大的原因

如果同一个脚本运行两次结果相差特别大.后一次的响应时间比前一次的响应时间慢了特别多,而期间开发又未修改过程序排查问题: 1.查看下linux内存利用情况 free -m 是查看内存情况 (通常可用内存占10%是可接受范围内) 如果可用内存很小的话 :一种可能是程序有问题 :另一种可能是磁盘空间不足了 当磁盘空间不足就会去写内存 2.可以先看下第二种情况成立否 : 命令 tf -m 查看磁盘空间情况结果看到磁盘空间为0了 3.查看哪个进程占用了这么多 ,最好通过log日志进行分析.在运行性能测试脚

打印信息-脚本运行是否成功

当我们要设计功能测试用例时,一般会有预期结果,有些预期结果是由测试人员通过肉眼进行判断的.因为自动化测试运行过程是无人值守,一般情况下,脚本运行成功,没有异样信息就标识用户执行成功.当然,这还不走在足够去正明一个用例确实是执行成功的.所以我们需要获得更多的信息来证明用例执行结果确实是成功的.通常我们可以通过获得页面的title .URL 地址,页面上的标识性信息(如,登录成功的"欢迎,xxx"信息)来判断用例执行成功. 在实际测试中,访问1 个页面然判断其title 是否符合预期是很常

来来来,有讲一个吐血的故事(matlab)之脚本运行路径是什么

脚本运行路径是什么,这真是太重要!! 重要1:你默认保存的路径 重要2:你访问的相对路径 先放图: 再看一幅图: 我的操作,点击左侧的文件夹,使上框的显示栏路径不一样,再点击运行,发现pwd指示的路径不一样.当然身亡.脚本的默认路径令人堪忧.难怪我总是错路径.addpath 总是出错. 解决方法: (1)按照上述的,点左边的文件夹,使上框显示的路径和你心仪的路径(你要运行的脚本路径)一致. (2)法2,run(‘你脚本的路径’) (3)附上永久修改默认路径的方法(不推荐) http://jing

unity脚本运行顺序具体的解释

unity脚本自带函数执行顺序例如以下:将以下脚本挂在随意物体执行就可以得到 Awake ->OnEable-> Start ->-> FixedUpdate-> Update  -> LateUpdate ->OnGUI ->Reset -> OnDisable ->OnDestroy using UnityEngine; using System.Collections; public class timetest : MonoBehavio