首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

python module manage

python模块     就是python的程序模块     顶层文件     模块文件1     模块文件2         可以将代码量较大的程序分割成多个有组织的、彼此独立但又能互相交互的代码片段,这些自我包含的有组织的代码段就是模块。模块在物理形式上表现为以.py结尾的代码文件。一个文件被看作一个独立的模块,一个模块也可以被看作是一个文件。模块的文件名就是模块的名字加上扩展名.py。每个模块都有自己的名称空间。     python允许“导入”其它模块以实现代码重用,从而也实现了将独立的代码文件组织成更大的程序系统。python中,模块也是对象;在一个模块顶层定义的所有变量都在被导入时成为了被导入模块的属性。 python的程序架构     一个python程序通常包括一个顶层程序文件和其它的模块文件(0个、1个或多个)     顶层文件:包含了程序的主要控制流程     模块文件:为顶层文件或其它模块提供各种功能性组件。模块首次导入(或重载)时,python会立即执行模块文件的顶层程序代码(不在函数内的代码),而位于函数主体内的代码直到函数被调用后才会执行。python也自带了很多模块,可以使用help(module)查看,这些被称为python标准库文件。 模块的执行环境     模块是被导入的(import),但模块也可以导入和使用其它模块,这些模块可以用python或其它编程语言写成。     模块可内含变量、函数以及类来进行其工作,而函数和类可以包含变量和其它元素。     建议:在顶层文件可以出现大量的控制流语句,而其它的被调用文件仅包含变量、函数及类,这样程序在执行时效率才会高。 python导入模块     在导入模块时只能使用模块名,而不能使用带.py后缀的模块文件名     import语句:导入指定的整个模块,包括生成一个以模块名命名的名称空间     import module1[, module2[, ... moduleN ]]       建议一个import语句只导入一个模块     import module as module_alias     from-import语句: 常用于只导入指定模拟的部分属性至当前名称空间。     from module import name1[, name2[, ... nameN ]]             例:from random import choice,randint,random     建议:在顶层文件可以出现大量的控制流语句,而其它的被调用文件仅包含变量、函数及类,这样程序在执行时效率才会高。     import 和 from - import是赋值语句     import和from 是可执行语句,类似于def,因此,它们可以嵌套在if测试中,出现于def中等等     python执行到这些语句时才会对其进行解析,这意味着,所有来自模块的属性仅在import语句执行后才能使用。     import 和from 都是隐性赋值语句     import 将整个模块对象赋值给一个变量名;from将一个或多个变量名赋值给导入此模块的模块中的同名对象     模块就是名称空间:模块的名称空间可以通过属性__dict__或dir(M)获取;模块属性可通过点号(.)运算符获取,格式为M.attr;模块是一个独立的作用域(本地变量就是全局变量)     import的工作机制     import语句导入指定的模块时会执行三个步骤:        (1) 找到模块文件:在指定的路径下搜索模块文件        (2) 编译成字节码:文件导入时就会编译,因此顶层文件的.pyc字节码文件在内部使用后会被丢弃,只有被导入的文件才会留下.pyc文件。        (3) 执行模块的代码来创建其所有定义的对象:模块文件中的所有语句会依次执行,从头至尾,而此步骤中任何对变量名的赋值运算,都会产生所得到的模块文件的属性。     注意:模块只在第一次导入时才会执行如上步骤。后续的导入操作只不过是提取内存中已加载的模块对象。reload可用于重新加载模块。     模块搜索:     python解释器在import模块时必须先找到对应的模块文件     程序的主目录;PYTHONPATH目录(如果设置了些变量);标准链接库目录;任何.pth文件的内容(如果存在.pth文件)     这四个组件组合起来即为sys.path所包含的路径,而python会选择"在搜索路径中的第一个符合导入文件名"的文件。        import sys        sys.path    返回一个路径列表,该路径列表是python解释器需要搜索的路径顺序列表

01

mod_portaudio

前几天,儿子由于顽皮以及我的疏忽碰破了头,去医院缝了3针,所以,这两天心神有点不宁,如果写得不好,抱歉了。 好在我们家附近有一家新开的医院,环境看起来都很新,人也不多,服务也不错。包扎好了就没事了,大家也不用担心。只是这几天我得在家里陪着他。 在医院时,看到医院到处都是易拉宝,墙上也贴着宣传牌。不过,上面的英语都翻译的很搞笑,当时没顾得拍照,但记得有一项“亲民医院”之类的词翻译成了kiss。当然,见怪不怪,这种神翻译随处可见,网友也有诸多吐嘈。相信大部分都是用机器翻译的,甚至有的还有不伦不类的“Service not available”。 不明白,为什么这些制作标牌的广告公司这么没修养(没文化有情可原,你告诉人家啊)。当然,出现这些问题主要的原因也不能太怪广告公司,还是在于花钱做这些广告牌子的人。即使自己不认识英语,找个大学生帮忙看看花不了几个钱吧?要不,就直接回归拼音吧,我记得小时间的标志牌都是中文和拼音并排的,如“新华书店”上面就挂着“XIN HUA SHU DIAN”。 好了,不扯这些了,今天说说mod_portaudio。

03

OpenWrt开源软路由项目使用

2020年9月10日 OpenWrt — building 成为最流行的自由和开源 (FOSS) 无线路由器项目已有16年的成功 — 今天加入 软件自由保护组织(SFC) 作为成员项目. FOSS无线路由器可确保所有互联网用户自由使用软件. 软件自由保护组织将帮助 OpenWrt 继续蓬勃发展并成为其新的财政赞助商. OpenWrt 在软件自由的历史上占有特殊的位置. OpenWrt的创建和发布表明 GPL 强制执行 有效并提高了软件自由度. 在2004年, Linksys发布了WRT54G路由器系列的固件代码时, 编码人员和修补匠重新重新控制了自己的路由器, 并且OpenWrt 根据GPL执法机构发布的资源启动了. 今天, OpenWrt 利用受GPL保护的软件自由与使用无线路由器连接到互联网的每个人共享该自由和控制权.

03

Initramfs_正在生成initramfs

一、initramfs是什么 在2.6版本的linux内核中,都包含一个压缩过的cpio格式的打包文件。当内核启动时,会从这个打包文件中导出文件到内核的rootfs文件系统,然后内核检查rootfs中是否包含有init文件,如果有则执行它,作为PID为1的第一个进程。这个init进程负责启动系统后续的工作,包括定位、挂载“真正的”根文件系统设备(如果有的话)。如果内核没有在rootfs中找到init文件,则内核会按以前版本的方式定位、挂载根分区,然后执行 /sbin/init程序完成系统的后续初始化工作。 这个压缩过的cpio格式的打包文件就是initramfs。编译2.6版本的linux内核时,编译系统总会创建initramfs,然后把它与编译好的内核连接在一起。内核源代码树中的usr目录就是专门用于构建内核中的initramfs的,其中的initramfs_data.cpio.gz文件就是initramfs。缺省情况下,initramfs是空的,X86架构下的文件大小是134个字节。

02

mod_skypopen

mod_skypeopen是一个有意思的模块,它提供FreeSWITCH与Skype的互通。 Skype是世界上广泛使用的VoIP软件,不过,在被微软收购后表现不怎么样,最近又传出Skype将停止提供第三方API接口,也就是说FreeSWITCH将无法与新版的Skype互通。 不过,旧版的Skype好像不受影响,而且,不管以后FreeSWITCH是否能与Skype互通,mod_skypopen对我们都有借鉴意义。 mod_skypopen的前身是mod_skypiax,后来才改为此名。该模块实现的很有意思。Skype不是提供API吗?也就是说它允许外部的程序通过一定的API控制Skype(相当于通信信令)。所以,理论上讲,就可以将控制Skype的部分代码放到FreeSWITCH中,而仍然需要启动一个Skype实例登录到实际的Skype网络中与其它Skype进行通信。在Linux中,通过使用内核中的虚拟声卡,可以指定不同的Skype实例使用不同的虚拟声卡,而在FreeSWITCH中通过访问这些虚拟声卡读写音频数据(相当于媒体流),进而完成信令和媒体的交互。 最初的Skype一个Skype账号在一台主机上只允许登录一次,所以我们最初使用时,注册了20个Skype账号,在一台Linux服务器上启动了20个Skype实例,并分别用不同的账号注册上去。对于FreeSWITCH而言,这20个实例就相当于20条外线,我们的SIP账号就可以通过这20条“Skype”外线打电话到其它的Skype账号上。 有什么用呢?当初我们在做在线一对一英语口语教学的,美国的老师使用SIP客户端,而学员一般使用手机(SIP客户端在我国不怎么稳定)与老师对话。但问题是,有的学员手机信号不好,有的呢,千里迢迢漫游到北京去上学习班(但却买我们的网络口语教学课程),无法支付高昂的漫游费。而使用Skype就解决了这一问题。 后来,Skype允许在一台主机上用同一账号多次登录,所以,我们就用同一个Skype账号登录20个Skype实例,实现了类似模块中继线的功能——打出去对外显示一个号。 当然,该模块是跨平台的,在Windows上也可以使用,也支持多账号。当前闲着没事的时候,我也实现了Mac来台上的支持,只不过后来没有继续开发,也没有合并到主分支里去。 mod_skypopen也是一个Endpoint。 ---------------------------------------- 题图:Before I die 来自 Google ---------------------------------------- FreeSWITCH-CN是什么? FreeSWITCH-CN是FreeSWITCH中文社区,我们的官方网站是 http://www.freeswitch.org.cn 。FreeSWITCH-CN同时也是一个微信公共账号,可以通过点击本页最顶端的“FreeSWITCH中文社... ”,或在通迅录->订阅号中搜索“FreeSWITCH-CN”来订阅,也可以到官方网站上扫描二维码。当然,不管是新用户还是老用户,随时都可以输入m或1显示本账号的主菜单。 FreeSWITCH-CN的账号维护者是Seven Du,在此,他会分享多年的FreeSWITCH使用经验,分享一些对开源VoIP软件以及软件社区的思考,并隔三差五的解答一些粉丝关心的问题。Seven Du于2007年听说、2008年开始使用FreeSWITCH,2009年创办FreeSWITCH-CN中文社区,2011~2013连续三年参加了在美国芝加哥举办的ClueCon全球VoIP开发者大会,该会议是由FreeSWITCH核心团队主办的。 如果你在学习和使用FreeSWITCH的过程中,有什么有趣的故事,也欢迎与我分享。移动设备上打字不方便,如果想写长的留言可以发邮件到 wechat@freeswitch.org.cn 。

02

将SIP Trace放入日志文件(mod_logfile)

今天,看大家在QQ群中聊到不知道如何在FreeSWITCH中将SIP Trace的结果放入日志文件中。我便答应大家我今晚研究一下。 事情的起因是这样的。FreeSWITCH内置了SIP Trace,可以很方便的在控制台或fs_cli中抓到SIP消息,配合日志调试起来非常方便。以前我应该也讲过,在FreeSWITCH中开启SIP Trace的命令是: sofia global sip trace on 当然,也可以单独针对某个Profile开启或关闭日志,如: sofia profile internal siptrace on sofia profile internal siptrace off 问题时,开启日志后SIP消息只能在控制台上显示,但不会同时进入日志文件中,显然,如果想从日志文件中同时看到SIP就比较麻烦了。因而,便出现了今天的主题:如何将SIP Trace放入日志? 首先,我想,提到该问题的人可能一般的是Windows用户吧。因为一般来说,我在Mac上(或Linux)上,Shell足够好用,因而,可以毫不费力的在Shell窗口(即FreeSWITCH控制台上)中将带有SIP消息的日志一块Copy出来粘贴到其它文件中。但在Windows上就没有那么方便了,因为Windows的命令行窗口出奇的烂,从里面Copy个文字特别麻烦。而且,有很多人根本不知道如何Copy(虽然确实有办法可以做到)。因而,常见的做法是直接用QQ抓屏,但很显然,抓屏是有限制的,那就是,一屏能显示的信息实在是太短了,如果要抓到SIP消息,那简直是个累死人的活。 而且,在此我也想插一句,我在帮人看日志时是非常讨厌抓屏的。因为看起来其实不直观,而且,没法搜索,没法Copy,没法引用…,总之,不爽。可能光说不爽有人觉得我矫情,那就说一下为什么不爽吧。比如有人在QQ群中问了个问题,我问他打的是什么命令,它将他打的命令抓了个图片发到QQ群中,我一眼就发现他的命令该怎么改成正确的方式,只要我将它的命令复制一遍,改几个字即可,但是,由于他是抓屏,因此我没法修改... 言归正传,所以,特别是Windows用户,一般是到日志文件中去找到相应的日志再复制出来,并且,有时候他们也希望SIP Trace出来的消息也同时在日志文件里面。 当然,既然我答应大家研究,就一定要出结果的(为什么要研究呢?因为我一直不用,所以没试过)。通过研究我发现,写日志文件的功能是在mod_logfile中实现的。里面有这么一行配置: <map name="all" value="debug,info,notice,warning,err,crit,alert"/> 到这里科普一下。在FreeSWITCH中,日志是有级别的,一般来说就是上面列的一些级别。当然,上面没有包括一个特殊的级别,那就是 console 级别。而SIP Trace的消息正是在 console 级别的,因而,它只有控制台上显示,而不会在日志文件中显示。明白了这个道理,想办法将console级别的日志放入日志文件就简单了,修改配置如下: <map name="all" value="console,debug,info,notice,warning,err,crit,alert"/> 然后,重新加载模块即可: reload mod_logfile 再看SIP Trace的结果,都写到日志文件中去了,Bingo! 当然,任何事情并不只有一种办法,第二种办法是什么呢?留点引子,明天再讲。 既然今天说到mod_logfile,就索性把这一模块也讲了吧。其实,有了上面的,也没什么好讲的。mod_logfile的作用就是将系统日志写到日志文件中去,并有相应的参数配置文件的路径以及文件的最大长度。如果文件写到一定的大小,则会自动发生轮转(rotate),以防止在长期运行过程中产生巨大无比的日志文件。 ---------------------------------------- 题图:Log 来自 Google Log本来是「圆木」的意思,但我们这些程序员们都将Log译为「日志」。 ---------------------------------------- FreeSWITCH-CN是什么? FreeSWITCH-CN是FreeSWITCH中文社区,我们的官方网站是 http://www.freeswitch.org.cn 。FreeSWITCH-CN同时也是一个微信公共账号,可以通过点击本页最顶端的“FreeSWITCH中文社... ”,或在通迅录->订阅号中搜索“FreeSWITCH-CN”来订阅,也可以到官方网站上扫描二维码。当然,不管是新用户还是老用户,随时都可以输入m或1显示本账号的主菜单。 FreeSWITCH-

01

GoLand激活码2022(2022Goland最新激活码)

KLMILO9UY9-eyJsaWNlbnNlSWQiOiJHT1VHRExEVVVGIiwibGljZW5zZWVOYW1lIjoi5rC45LmF5r+A5rS7IHd3d8K3YWppaHVvwrdjb20iLCJhc3NpZ25lZU5hbWUiOiIiLCJhc3NpZ25lZUVtYWlsIjoiIiwibGljZW5zZVJlc3RyaWN0aW9uIjoiIiwiY2hlY2tDb25jdXJyZW50VXNlIjpmYWxzZSwicHJvZHVjdHMiOlt7ImNvZGUiOiJQQyIsInBhaWRVcFRvIjoiMjAyMi0xMC0yMiIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUFBDIiwicGFpZFVwVG8iOiIyMDIyLTEwLTIyIiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBXUyIsInBhaWRVcFRvIjoiY1dsGw9l2T8ENH3LSXOLgQZerqGL9O8MKw4n0Tx0da3f73PUo6yjRKxr3AVkwYUiW5VLXpF2nWIPSk+6Wd7Zyq31RTFbZTrY/OJE8++zXHj9biJG8mcCOnEwTgOZYgwEUzjjLw27Dkl9gq5vBcYEo1F4lr/lWSc6wlzCY48Syvoni9xAE9cFHDkUHNA7muTetqLem8QxHEtaHenbwBhdA803AIpGLYnZ0kMwjPWNzEx+Awc768oxZ6BoFvKtOqe3fW5jlL0yCIGYz/RE9RixVK7TBNVBFxm/PLOWLYlQytw5ECk3EqwDoszcoqMYAYZXaT45yopeQ==-MIIETDCCAjSgAwIBAMjAyMi0xMC0yMiIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQU0kiLCJwYWlkVXBUbyI6IjIwMjItMTAtMjIiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUENXTVAiLCJwYWlkVXBUbyI6IjIwMjItMTAtMjIiLCJleHRlbmRlZCI6dHJ1ZX1dLCJtZXRhZGF0YSI6IjAxMjAyMjA5MjNQU0FNMDAwMDA1IiwiaGFzaCI6IjM4MTM3NzQ2LzA6LTg5OTkzNTkwOCIsImdyYWNlUGVyaW9kRGF5cyI6NywiYXV0b1Byb2xvbmdhdGVkIjpmYWxzZSwiaXNBdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlfQ==-kqXUG+MjwwlLjgIBDTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTIwMTAxOTA5MDU1M1oXDTIyMTAyMTA5MDU1M1owHzEdMBsGA1UEAwwUcHJvZDJ5LWZyb20tMjAyMDEwMTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDCP4uk4SlVdA5nuA3DQC+NsEnZS9npFnO0zrmMWcz1++q2UWJNuGTh0rwi+3fUJIArfvVh7gNtIp93rxjtrQAuf4/Fa6sySp4c32MeFACfC0q+oUoWebhOIaYTYUxm4LAZ355vzt8YeDPmvWKxA81udqEk4gU9NNAOz1Um5/8LyR8SGsSc4EDBRSjcMWMwMkYSauGqGcEUK8WhfplsyF61lKSOFA6VmfUmeDK15rUWWLbOMKgn2cxFA98A+s74T9Oo96CU7rp/umDXvhnyhAXSukw/qCGOVhwKR8B6aeDtoBWQgjnvMtPgOUPRTPkPGbwPwwDkvAHYiuKJ7Bd2wH7rAgMBAAGjgZkwgZYwCQYDVR0TBAIwADAdBgNVHQ4EFgQUJNoRIpb1hUHAk0foMSNM9MCEAv8wSAYDVR0jBEEwP4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0GCCQDSbLGDsoN54TATBgNVHSUEDDAKBggrBgEFBQcDATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBAB2J1ysRudbkqmkUFK8xqhiZaYPd30TlmCmSAaGJ0eBpvkVeqA2jGYhAQRqFiAlFC63JKvWvRZO1iRuWCEfUMkdqQ9VQPXziE/BlsOIgrL6RlJfuFcEZ8TK

01
领券