项目相关笔记:

``````````````````````````````````````````````````````````````````````````````````
1.实时输出文本框输入的内容信息
self.Text = wx.TextCtrl(panel, -1, "content", size=(length, width), pos=(x, y))
self.Bind(wx.EVT_TEXT, self.OnText, self.Text)
def OnText(self, event):
print(self.Text.GetValue())
``````````````````````````````````````````````````````````````````````````````````
2.为数据库SQLite3传入变量参数:
以insert插入为例:
cursor.execute("insert into catalog values('" + Variable1+ "', '" + Variable2+ "', ......)")

``````````````````````````````````````````````````````````````````````````````````
3.SQLite中为标题目录中的主键设置自增功能:
首先创建数据库:
data = sqlite3.connect('data.db')
为该数据库创建游标:
cu = data.cursor()
创建数据库标题目录(其中id integer PRIMARY KEY autoincrement即:自动递增主键):
cu.execute(""" create table catalog ( id integer PRIMARY KEY autoincrement ) """)
然后再insert插入时,将该字段设为NULL,即可由引擎自动设定其值,引擎会设定为最大的rowid+1。当然,也可以设置为非NULL的数字来自己指定这个值,但这样就必须自己小心,不要引起冲突。当这个rowid的值大于所能表达的最大值 9223372036854775807 (3.0及以后版本的rowid最大值)后,rowid的新值会这个最大数之前随机找一个没被使用了的值。所以在rowid达到最大值前,rowid的值是严格单调增加的。
参考:http://www.cnblogs.com/zhw511006/archive/2010/09/08/1821596.html
``````````````````````````````````````````````````````````````````````````````````
4、如何用一个shell脚本文件打开一个新的terminal终端,并运行程序:
脚本如下:
gnome-terminal -t " Title " -x bash -c " ShellCommand ;exec bash;" &
-t 为打开终端的标题,便于区分。
-x 后面的为要在打开的终端中执行的脚本,根据需要自己修改就行了。
最后的exec bash;是让打开的终端在执行完脚本后不关闭。
同时,要想关闭所有终端窗口,执行:
killall  gnome-terminal  (此命令会关闭所有终端,慎用)
``````````````````````````````````````````````````````````````````````````````````
5、关于OpenBTS-2.6.0部分结构功能文件的注解:

首次接入网络,发送“Welcome to OpenBTS!”欢迎短信的模块:
路径:/usr/local/src/openbts-2.6.0Mamou/Control/中的MobilityManagement.cpp文件268行左右。

首次接入网络后,BTS所接收到的手机IMSI码存放的文件:
路径:/usr/local/src/openbts-2.6.0Mamou/apps/中的TMSITable.txt文件

首次接入网络后,手机所收到的短信信息内容设置,以及频点ARFCN设置所在的配置文件:
路径:/usr/local/src/openbts-2.6.0Mamou/apps/中的OpenBTS.config文件 
``````````````````````````````````````````````````````````````````````````````````
6. kal-v0.4编译源码出错,解决方法:

make clean
make distclean
./bootstrap
./configure
make

kal可进行OpenBTS通讯频点测试,其常见测试频点命令:
./kal -s GSM900 -R A
./kal -c 频点号
``````````````````````````````````````````````````````````````````````````````````
7、读取已打开文件的指定行数的字符内容:
        import linecache

        linecache.getline('3_2.txt',linecount)

注意:在使用此功能函数过程中可能会遇到一个问题,就是当在python脚本中对linecache.getline执行循环读取操作时,当已打开文件指定行数字符内容发生变化时,用linecache.getline读到的内容却不变且依然维持第一次读取的结果,这是由于linecache的缓存没有清除的缘故,所以在用linecache之前清除一下缓存就好了(CMD:linecache.clearcache())。

``````````````````````````````````````````````````````````````````````````````````
8、字符串切割:

string = 'Everything is gonna be alright!'

print(string[23:])        结果:    alright!

print(string[:21])        结果:    Everything

``````````````````````````````````````````````````````````````````````````````````
9、configparser模块处理ini配置文件
``````````````````````````````````````````````````````````````````````````````````
10、

杀死进程:os.system('kill '+processNum)

删除文件: os.remove('~DeleteFilePath~')

用Python执行终端命令:os.system("command")

wx.choice控件得到其选项位置及内容:

# Display the position of the selection

print self.choice.GetSelection()

# Display the selection

print self.choice.GetStringSelection()


``````````````````````````````````````````````````````````````````````````````````

11、shell判断文件是否存在,若存在则删除:

假设文件名为test.txt 位置是/opt/test.txt

#/bin/bash
if [ -f /opt/test.txt ]
then
rm -rf /opt/test.txt
else
echo "This file is not exist."
fi

``````````````````````````````````````````````````````````````````````````````````

12、Python判断文件及文件夹是否存在:
import os
os.path.isfile('test.txt') #如果不存在就返回False
os.path.exists(directory) #如果目录不存在就返回False

``````````````````````````````````````````````````````````````````````````````````

13、Linux中在指定目录的所有文件中查找特定的字符串:

比如在/var/log中查找“test”:

方法一:使用find的exec选项

find /var/log –exec grep –nH “test” {} \;
方法二:使用find和xarg
find /var/log | xargs grep -nH "test"

``````````````````````````````````````````````````````````````````````````````````

14、IMSI共有15位,其结构如下: 
  MCC+MNC+MSIN 
MCC:Mobile Country Code,移动国家码,MCC的资源由国际电联(ITU)统一分配和管理,唯一识别移动用户所属的国家,共3位,中国为460; 
MNC:Mobile Network Code,移动网络码,2~3位,中国移动系统使用00、02、07,中国联通GSM系统使用01,中国电信CDMA系统使用03,
一个典型的IMSI号码为460030912121001;
 
MSIN:Mobile Subscriber Identification Number, 
移动用户识别号码,共有10位,其结构如下: 
  EF+M0M1M2M3+ABCD 
其中的M0M1M2M3和MDN号码中的H0H1H2H3可存在对应关系,ABCD四位为自由分配。 
可以看出IMSI在NMSI号码前加了MCC,可以区别出每个用户的来自的国家,因此可以实现国际漫游。
在同一个国家内,如果有多个移动网络运营商,可以通过MNC来进行区别.
```````````````````
区别于IMEI:International Mobile Equipment Identity 
(国际移动设备标识) 

``````````````````````````````````````````````````````````````````````````````````

15、flush() 是把缓冲区的数据强行输出, 主要用在IO中,即清空缓冲区数据,一般在读写流(stream)的时候,
数据是先被读到了内存中,再把数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,
因为还有一部分有可能会留在内存这个缓冲区中。
这时候如果你调用了close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先flush()。

``````````````````````````````````````````````````````````````````````````````````

16、在配置vim时,首先将vim.tar.gz解压至root目录,且将.vimrc复制到root目录并将第15行变量set directory路径改为/root/.vim/tmp_file后,用vim打开文件,出现如下提示:
Exuberant ctags (http://ctags.sf.net) not found in PATH. Plugin is not loaded

解决方法:

The bug depends on the vim plugin "taglist". The plugin requirers the"Exuberant ctags" wich you can download at http://ctags.sf.net.
After you have unziped it, you have to add the ctags location to the PATH variable, or set the Tlist_Ctags_Cmd variable in the .
vimrc file (http://vim-taglist.sourceforge.net/manual.html#%27Tlist_Ctags_Cmd%27). e.g.
Windows: let Tlist_Ctags_Cmd = 'd:\tools\ctags.exe'
Unix: let Tlist_Ctags_Cmd = '/usr/local/bin/ctags'
Now restart Vim and the message shouldnt pop up again
即:安装ctags,并在.vimrc中补充
" let Tlist_Ctags_Cmd = '/usr/local/bin/ctags'  "
然后重启vim,在normal状态下输入"wm",会出现修改后的效果。

``````````````````````````````````````````````````````````````````````````````````

17、终端提示没有“Python.h”头文件:
解决方法:安装头文件及静态库包:
sudo apt-get install python-dev 

``````````````````````````````````````````````````````````````````````````````````

18、默认网关设置:

给网络配置网关则需要用到route命令,设置网关的命令格式是:

# route add default gw 网关地址

例子:网关IP为192.168.1.10

# route add default gw 192.168.1.10
``````````````````````````````````````````````````````````````````````````````````

19、项目代码调试之打印遍历函数名及所在行数:
在每个函数中添加:printf("[%s.%d]\n", __FUNCTION__,__LINE__);
可跟踪函数运行次序,如若出现bug,可及时反馈所在函数及其行数位置。

``````````````````````````````````````````````````````````````````````````````````

20、在MobilityManagement.cpp120~128

添加内容:

短信计数且将计数结果存于路径位于:/usr/local/src/openbts-2.6.0Mamou/apps/count.txt文件。


apps/OpenBTS.cpp 326行往后:

Socket_server的实现

同时添加了一个server.c的客户端文件,可实现通过编译后的./server ‘’命令控制OpenBTS>命令行的设置命令。

``````````````````````````````````````````````````````````````````````````````````

21、

apps/中添加了cutIMSI.sh文件:

用于解析TMSITable.txt文件中的IMSI码,并将码值存入blacklist.txt中,方便SIP/SIPEngine.cpp文件第154行的fopen()读取。

SIP/SIPEngine.cpp文件149~188行:

读取黑名单IMSI,若为空则继续注册,若有值则与注册过的IMSI码作对比,并使之踢出网络不得登陆。

``````````````````````````````````````````````````````````````````````````````````

22、

CLI/CLI.cpp文件中420~435行:

添加了一个设置频点的函数int arfcn(int argc , char** argv , ostream& os, istream& is),方便通过openbts>命令行方式设置频点ARFCN

start.sh中实现:

开启四个终端并运行OpenBTS,并将其四个终端的进程信息重定向至一个文件中,以便message.py运行时读取每个进程号在需要时Kill掉中终端。

``````````````````````````````````````````````````````````````````````````````````

23、

reboot.sh中实现:

重新启动smqueueOpenBTS

install.sh 中实现:

MobilityManagement.cppOpenBTS.config替换到源码相关所在位置,对OpenBTS源码进行重新编译。

run.sh中实现:

运行message.py且对前一次生成数据库进行清除。

``````````````````````````````````````````````````````````````````````````````````