<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Python</title><link>http://leejd.cndev.org/category/585.aspx</link><description>Python</description><managingEditor>小东</managingEditor><dc:language>zh-CHS</dc:language><generator>.Text Version 0.95.2004.101</generator><item><dc:creator>小东</dc:creator><title>字节序问题</title><link>http://leejd.cndev.org/archive/2005/09/15/43668.aspx</link><pubDate>2005-09-15 11:09:00Z</pubDate><guid>http://leejd.cndev.org/archive/2005/09/15/43668.aspx</guid><wfw:comment>http://leejd.cndev.org/comments/43668.aspx</wfw:comment><comments>http://leejd.cndev.org/archive/2005/09/15/43668.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://leejd.cndev.org/comments/commentRss/43668.aspx</wfw:commentRss><trackback:ping>http://leejd.cndev.org/services/trackbacks/43668.aspx</trackback:ping><description>&lt;P&gt;今天使用Python来读取二进制文件。直接使用read读取，读入的内容没有错误，长度也是对的，使用了type函数查看了一下内存中的数据类型，发现是str的，初步认为是采用C语言里面的char方式存储。&lt;/P&gt;
&lt;P&gt;不过我是要把读入的内容转为内存中的数据结构，需要处理整型等数据类型。由于自己认为是char方式存储的，就直观的认为只要将4个字节的char使用int()函数强制转换一下就没有问题的，不过转换失败。后来咨询了木头，说是要使用struct来处理。查手册，发现struct狠简单，常用的函数就是pack和unpcak。使用unpack函数试试，先google一下，网上面有没有相关的例子代码，发现一个：&lt;!--StartFragment --&gt; &lt;BR&gt;print&amp;nbsp;struct.unpack('&amp;gt;I',recv_data[recv_len-6:recv_len-2])[0] &lt;BR&gt;然后就照猫画虎写了一个&lt;BR&gt;("%s")%struct.unpack("&amp;gt;I", buff[462:466])&lt;BR&gt;不过测试结果却出乎我的意料，读出来的数据不对。同时对&amp;gt;号感到奇怪，查手册struct的下半部分，发现&amp;gt;是表示网络字节序方式，而不是我们x86系列的本地字节序，删除&amp;gt;试试，读出来的结果正确。&lt;/P&gt;
&lt;P&gt;以前只是在写网络程序的时候要注意网络字节序问题，现在突然发现，python里面也要考虑字节序，看来python的处理考虑的还是狠周到的。不过以后也要注意二进制的字节序问题了，毕竟网络过来的二进制数据会越来越多的，很多程序中应该考虑这个问题。&lt;/P&gt;&lt;img src ="http://leejd.cndev.org/aggbug/43668.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小东</dc:creator><title>Python的数据结构还是狠不错的</title><link>http://leejd.cndev.org/archive/2005/09/08/43565.aspx</link><pubDate>2005-09-08 17:39:00Z</pubDate><guid>http://leejd.cndev.org/archive/2005/09/08/43565.aspx</guid><wfw:comment>http://leejd.cndev.org/comments/43565.aspx</wfw:comment><comments>http://leejd.cndev.org/archive/2005/09/08/43565.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://leejd.cndev.org/comments/commentRss/43565.aspx</wfw:commentRss><trackback:ping>http://leejd.cndev.org/services/trackbacks/43565.aspx</trackback:ping><description>&lt;P&gt;现在写的程序中，一直都在集成Python，所以对Python的数据结构比较熟悉了。今天使用STL来写一个不带Python的程序，发现STL的结构虽然轻巧，但是感觉Python的数据结构操作起来更是方便。可能是跟这几天一直在用Python的数据结构有关吧。&lt;/P&gt;
&lt;P&gt;其实最关键的地方是文本文件的处理，使用Python脚本把文本读进来，处理，然后直接存为Python的数据结构方式，比使用C++读入文本再使用STL方式来保存方便很多。不过Python的数据结构至少需要带一个DLL文件，这对于小程序是一个累赘啊。&lt;/P&gt;&lt;img src ="http://leejd.cndev.org/aggbug/43565.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小东</dc:creator><title>Python嵌入程序的调试</title><link>http://leejd.cndev.org/archive/2005/09/03/43467.aspx</link><pubDate>2005-09-03 13:24:00Z</pubDate><guid>http://leejd.cndev.org/archive/2005/09/03/43467.aspx</guid><wfw:comment>http://leejd.cndev.org/comments/43467.aspx</wfw:comment><comments>http://leejd.cndev.org/archive/2005/09/03/43467.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://leejd.cndev.org/comments/commentRss/43467.aspx</wfw:commentRss><trackback:ping>http://leejd.cndev.org/services/trackbacks/43467.aspx</trackback:ping><description>&lt;P&gt;最近的这个项目，是利用Python操作文本的方便和快捷性，嵌入到项目中处理文本文件。目前做的就是将Python解释器集成到程序里面，然后附带一个Python24.dll，不过这样好像还是差一个文件的，msvcr71.dll，开始测试的时候，由于机器里面装有Python24,没有测试出来，到客户那里演示的时候，才发现没有这个文件，幸亏带了Python的安装包，要不然就出丑了。&lt;/P&gt;
&lt;P&gt;由于昨天对脚本进行了一些改动，改动的结果感觉差不多，就没有测试直接给演示了，导致演示中出现了一个小问题，改动部分的脚本执行有问题，程序调用返回始终是NULL。开始以为是脚本调用错了，后来以为是缓存的问题，总之排除了很多外在的因素后，最后认为Python的脚本有问题。最后查得得结果是处理传出来的数据结构中，脚本处理有问题，导致单独执行的时候没错（因为测试用的数据结构没有和传出来的匹配），但是集成处理有问题。&lt;/P&gt;
&lt;P&gt;开始的时候，就是准备将Python执行的日志集成进去，不过由于偷懒，只做了程序的，没有做脚本的。认为脚本在本地执行了，程序再去执行是应该没有问题的，现在发现还有有些不同，需要处理的。看来把Python的执行日志集成进去是必要的，否则临时修改脚本，出错了就不好找问题所在了。&lt;/P&gt;&lt;img src ="http://leejd.cndev.org/aggbug/43467.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小东</dc:creator><title>水平有待加强</title><link>http://leejd.cndev.org/archive/2005/08/21/43247.aspx</link><pubDate>2005-08-21 18:27:00Z</pubDate><guid>http://leejd.cndev.org/archive/2005/08/21/43247.aspx</guid><wfw:comment>http://leejd.cndev.org/comments/43247.aspx</wfw:comment><comments>http://leejd.cndev.org/archive/2005/08/21/43247.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://leejd.cndev.org/comments/commentRss/43247.aspx</wfw:commentRss><trackback:ping>http://leejd.cndev.org/services/trackbacks/43247.aspx</trackback:ping><description>&lt;P&gt;现在终于可以开始全心的投入到Python的嵌入开发中了。不过由于好长时间没有接触到Python这块，使得原先掌握的嵌入式Python的知识忘记了不少，现在很多时候还是需要重新去温习一遍。从网上查到的资料，搞Python的嵌入式开发还是比较少的，基本都是作为一种开发的辅助来进行。我现在的参考资料只有Python自己手册里面带的C API部分。不过自己的英语水平不行，很多地方看得不是狠明白，主要是阅读速度太慢了，不过幸亏有代码可以试，这样开发起来感觉难度是不算大的。不过刚开始的时候，可能内存处理没怎么注意，不过幸亏是客户端，实在不行可以重启一下机器，不怕：）不过随着开发的进入，这些东西必须注意起来，因为这些东西如果处理不好的话，会影响软件的稳定性，不过在软件的第一个版本中，还是功能要优先实现的。&lt;/P&gt;
&lt;P&gt;今天写了一个C++的代码，居然用上了Python的语法，非常郁闷：）就是将字符串转为Python对象的时候，我弱智到了直接使用PyObject *进行强制转换了，实际上应该是使用PyString_FromString进行的，导致调试的时候老是非法操作。感觉还是基本功不扎实，需要加强。&lt;/P&gt;&lt;img src ="http://leejd.cndev.org/aggbug/43247.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小东</dc:creator><title>Embedding Python Tips</title><link>http://leejd.cndev.org/archive/2005/08/21/43246.aspx</link><pubDate>2005-08-21 14:31:00Z</pubDate><guid>http://leejd.cndev.org/archive/2005/08/21/43246.aspx</guid><wfw:comment>http://leejd.cndev.org/comments/43246.aspx</wfw:comment><comments>http://leejd.cndev.org/archive/2005/08/21/43246.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://leejd.cndev.org/comments/commentRss/43246.aspx</wfw:commentRss><trackback:ping>http://leejd.cndev.org/services/trackbacks/43246.aspx</trackback:ping><description>&lt;P&gt;转自：&lt;A href="http://stompstompstomp.com/weblog/entries/72/"&gt;http://stompstompstomp.com/weblog/entries/72/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;这是我在查找嵌入Python文章的时候发现的，主要是讲述一些Python嵌入的Tips。&lt;/P&gt;&lt;img src ="http://leejd.cndev.org/aggbug/43246.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小东</dc:creator><title>发点牢骚</title><link>http://leejd.cndev.org/archive/2005/06/15/16295.aspx</link><pubDate>2005-06-15 20:42:00Z</pubDate><guid>http://leejd.cndev.org/archive/2005/06/15/16295.aspx</guid><wfw:comment>http://leejd.cndev.org/comments/16295.aspx</wfw:comment><comments>http://leejd.cndev.org/archive/2005/06/15/16295.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://leejd.cndev.org/comments/commentRss/16295.aspx</wfw:commentRss><trackback:ping>http://leejd.cndev.org/services/trackbacks/16295.aspx</trackback:ping><description>&lt;P&gt;这一个月来，由于自己的一些问题，一直没有碰Python代码，今天看到别人写了一个比较有意思的类，我准备用Python代码改一下。由于手头没有合适的编辑器，直接拿记事本来着，但是写到一半的时候，突然发现自己对Python代码已经有点陌生了，对照着别人现成的类改，一口气居然没法改下来。看来，熟能生巧这个成语还是有一定的道理的。不过等这段事情过了之后，得好好的回到Python继续研究了，不过主要还是侧重嵌入式研究，感觉这个玩意还是比较好玩的。&lt;/P&gt;
&lt;P&gt;这几天的代码里面，涉及到了一些字符串操作，自己就老是想使用Python来进行，可惜目前的项目不允许这样做，主要是自己的Python嵌入还没有搞的顺畅。不过以后可以考虑加入，毕竟简单的应用只是多了一个DLL的问题，但是带来开发上的方便是无法想象的:)&lt;/P&gt;&lt;img src ="http://leejd.cndev.org/aggbug/16295.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小东</dc:creator><title>wxMozilla</title><link>http://leejd.cndev.org/archive/2005/05/31/14503.aspx</link><pubDate>2005-05-31 21:33:00Z</pubDate><guid>http://leejd.cndev.org/archive/2005/05/31/14503.aspx</guid><wfw:comment>http://leejd.cndev.org/comments/14503.aspx</wfw:comment><comments>http://leejd.cndev.org/archive/2005/05/31/14503.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://leejd.cndev.org/comments/commentRss/14503.aspx</wfw:commentRss><trackback:ping>http://leejd.cndev.org/services/trackbacks/14503.aspx</trackback:ping><description>&lt;P&gt;地址:&lt;A href="http://wxmozilla.sourceforge.net/"&gt;http://wxmozilla.sourceforge.net/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;wxMozilla is a project to develop a wxWindows component for embedding the Mozilla browser into any wxWindows application. The wxMozilla classes use Mozilla's XPCOM (Cross Platrom COM) interface to embed a HTML browser or editor within the application. &lt;/P&gt;
&lt;P&gt;一直以为,如果自己的程序想嵌入网页,而且兼容性要好一点,就只能使用IE,但是今天突然发现这个家伙,呵呵,看来嵌入firefox也是有希望的啊.&lt;/P&gt;&lt;img src ="http://leejd.cndev.org/aggbug/14503.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小东</dc:creator><title>数据库的选择</title><link>http://leejd.cndev.org/archive/2005/04/29/11981.aspx</link><pubDate>2005-04-29 23:52:00Z</pubDate><guid>http://leejd.cndev.org/archive/2005/04/29/11981.aspx</guid><wfw:comment>http://leejd.cndev.org/comments/11981.aspx</wfw:comment><comments>http://leejd.cndev.org/archive/2005/04/29/11981.aspx#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://leejd.cndev.org/comments/commentRss/11981.aspx</wfw:commentRss><trackback:ping>http://leejd.cndev.org/services/trackbacks/11981.aspx</trackback:ping><description>&lt;P&gt;开始的时候，准备在自己的客户端系统中完全放弃数据库，改用内存和XML实现，这样操作起来简单，可移植性也高。但是到目前，发现一个问题，就是数据库编辑后保存没有想想中的简单。虽然可以做到，但是代码量却是直线上升。看来不引入数据库是不行了。&lt;/P&gt;
&lt;P&gt;开始的时候考虑使用access，不过根据以前的经验，这个玩意太不可靠了，对开发人员要求很高，数据库操作稍微不小心，就会给你报错。想想还是放弃吧，以后给工程人员维护，估计数据库会。考虑使用客户端可以嵌入的数据库系统，这样在客户端可以一次安装。所以MSDE之类的已经不在考虑之列了。最后在mysql，sqlite，firebird之间选择（发现一个开源数据库比较的网页：&lt;A href="http://www.csdn.net/news/newstopic/4/4986.shtml"&gt;http://www.csdn.net/news/newstopic/4/4986.shtml&lt;/A&gt;），由于客户端使用了BCB工具进行开发，而且前段时间好像也有人提到Python链接FB的问题，估计这两个支持是没有问题的了。这样可以使用BCB的快速的GUI开发功能，也可使用Python的脚本功能。&lt;/P&gt;
&lt;P&gt;不过目前使用FB遇到的一个问题是，没有一个GUI界面的可以操作FB数据库的工具，可能是我没有找到。暂时还不了解Python对FB支持的程度，还得找找资料，慢慢来啊！找到了一个FB工具的网站：&lt;A href="http://www.sqlmanager.net/products/ibfb"&gt;http://www.sqlmanager.net/products/ibfb&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://leejd.cndev.org/aggbug/11981.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小东</dc:creator><title>函数调用终于可以返回值了</title><link>http://leejd.cndev.org/archive/2005/04/18/10886.aspx</link><pubDate>2005-04-18 21:49:00Z</pubDate><guid>http://leejd.cndev.org/archive/2005/04/18/10886.aspx</guid><wfw:comment>http://leejd.cndev.org/comments/10886.aspx</wfw:comment><comments>http://leejd.cndev.org/archive/2005/04/18/10886.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://leejd.cndev.org/comments/commentRss/10886.aspx</wfw:commentRss><trackback:ping>http://leejd.cndev.org/services/trackbacks/10886.aspx</trackback:ping><description>&lt;P&gt;前几天的BCB调用Python，没有直接在C++里面调用Python函数，只是简单的使用了PyRun_SimpleString()这个函数进行指定字符串的执行。这种调用，对于没有输出结果，或者是输出结果在文件之类时还是可以使用的，但是通常情况下，我们调用函数是需要返回一个结果给被调用者的。针对这种情况，使用解释字串方式可行性不大了（可以实现，使用输出流重定向，但是处理起来复杂），只能是调用函数，然后接受函数的返回值。&lt;/P&gt;
&lt;P&gt;这种调用也是比较简单的（因为我只要求返回字串就可以了:)），首先使用PyImport_ImportModule初始化你要调用的模块(一般指文件名)，然后使用PyObject_CallMethod调用你的Python函数，当然了，调用函数的参数是需要设置的。&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;参考代码：&lt;/STRONG&gt;&lt;BR&gt;-----------------------------------&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AnsiString ScriptPath = ExtractFilePath(Application-&amp;gt;ExeName)+&lt;FONT color=#0000ff&gt;"script"&lt;/FONT&gt;;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AnsiString PyStr;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PyObject *pName, *pOs, *pArg, *pResult, *pCall;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Py_Initialize();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; InitLogger();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pOs = PyImport_ImportModule(&lt;FONT color=#0000ff&gt;"os.path"&lt;/FONT&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PyObject_CallMethod(pOs, &lt;FONT color=#0000ff&gt;"join"&lt;/FONT&gt;, &lt;FONT color=#0000ff&gt;"(s)"&lt;/FONT&gt;, ScriptPath.c_str());&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pCall = PyImport_ImportModule(&lt;FONT color=#0000ff&gt;"BOMandXY"&lt;/FONT&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pResult = PyObject_CallMethod(pCall, &lt;FONT color=#0000ff&gt;"ReadBOM"&lt;/FONT&gt;, &lt;FONT color=#0000ff&gt;"(s)"&lt;/FONT&gt;, FileName.c_str());&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ShowMessage(PyString_AsString(pResult));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Py_Finalize();&lt;/P&gt;&lt;img src ="http://leejd.cndev.org/aggbug/10886.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>小东</dc:creator><title>BCB中集成Python终于成功了</title><link>http://leejd.cndev.org/archive/2005/04/16/10764.aspx</link><pubDate>2005-04-16 15:30:00Z</pubDate><guid>http://leejd.cndev.org/archive/2005/04/16/10764.aspx</guid><wfw:comment>http://leejd.cndev.org/comments/10764.aspx</wfw:comment><comments>http://leejd.cndev.org/archive/2005/04/16/10764.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://leejd.cndev.org/comments/commentRss/10764.aspx</wfw:commentRss><trackback:ping>http://leejd.cndev.org/services/trackbacks/10764.aspx</trackback:ping><description>&lt;P&gt;这几天经过断断续续的摸索，请教了不少人，也发了不少帖子和mail，终于把Python集成到BCB里面的工作给实现了。&lt;/P&gt;
&lt;P&gt;其实按照Python给的文档里面的描述不错，确实是可以使用的，不过那个是发布版本的，而我们的工程默认是DEBUG版本的，里面有一个宏：_DEBUG。所以如果你使用的是默认的工程，编译Python文档给的例子是链接无法通过的。解决的办法就是增加DEBUG的LIB和DLL。开始的时候，我使用的是别人给我的lib库和dll文件，但是在运行的时候，出现错误。经过调试，应该不是我自己程序本身的问题，怀疑debug库是要在自己机器上编译的。然后下个Python的源码，在自己的机器上编译了一个lib和dll，再加入到工程里面就好了。&lt;/P&gt;
&lt;P&gt;还发现一个问题，Python在解释的时候，居然不认识\r这个字符，我在PyRun_SimpleString()之前必须要把这个字符替换掉。界面如下&lt;BR&gt;&lt;IMG src="http://www.cndev.org/.imgdb/sn10049/GUID-AB0F12D9-8E2A-4F52-A0FB-99701EDD74E0.jpg"&gt;&lt;/P&gt;&lt;img src ="http://leejd.cndev.org/aggbug/10764.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>