项目相关笔记: `````````````````````````````````````````````````````````````````````````````````` 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 fi `````````````````````````````````````````````````````````````````````````````````` 12、Python判断文件及文件夹是否存在:import os os.path.isfile('test.txt') #如果不存在就返回False os.path.exists(directory) #如果目录不存在就返回False ``````````````````````````````````````````````````````````````````````````````````
``````````````````````````````````````````````````````````````````````````````````
MCC:Mobile Country Code,移动国家码,MCC的资源由国际电联(ITU)统一分配和管理,唯一识别移动用户所属的国家,共3位,中国为460; MNC:Mobile Network Code,移动网络码,2~3位,中国移动系统使用00、02、07,中国联通GSM系统使用01,中国电信CDMA系统使用03,
MSIN:Mobile Subscriber Identification Number,
移动用户识别号码,共有10位,其结构如下:
EF+M0M1M2M3+ABCD
其中的M0M1M2M3和MDN号码中的H0H1H2H3可存在对应关系,ABCD四位为自由分配。
可以看出IMSI在NMSI号码前加了MCC,可以区别出每个用户的来自的国家,因此可以实现国际漫游。 区别于IMEI:International Mobile Equipment Identity (国际移动设备标识) `````````````````````````````````````````````````````````````````````````````````` 15、flush() 是把缓冲区的数据强行输出, 主要用在IO中,即清空缓冲区数据,一般在读写流(stream)的时候, `````````````````````````````````````````````````````````````````````````````````` 16、在配置vim时,首先将vim.tar.gz解压至root目录,且将.vimrc复制到root目录并将第15行变量set directory路径改为/root/.vim/tmp_file后,用vim打开文件,出现如下提示: `````````````````````````````````````````````````````````````````````````````````` 17、终端提示没有“Python.h”头文件: `````````````````````````````````````````````````````````````````````````````````` 18、默认网关设置: 19、项目代码调试之打印遍历函数名及所在行数: `````````````````````````````````````````````````````````````````````````````````` 20、在MobilityManagement.cpp中120~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中实现: 重新启动smqueue及OpenBTS。 在install.sh 中实现: 将MobilityManagement.cpp及OpenBTS.config替换到源码相关所在位置,对OpenBTS源码进行重新编译。 在run.sh中实现: 运行message.py且对前一次生成数据库进行清除。 `````````````````````````````````````````````````````````````````````````````````` |