Python调用.NET库具体步骤 (python教程)

教程大全 2025-07-14 07:25:28 浏览
python教程

.NET Framework 类库是一个由 Microsoft .NET Framework SDK 中包含的类、接口和值类型组成的库。该库提供对系统功能的访问,是建立 .NET Framework 应用程序、组件和控件的基础。

开发背景是这样的:整个项目中使用很多台摩托罗拉的RFID读卡器,我要为这些读卡器写一个管理程序,判断是否有RFID标签进入或离开某个区域。用户提供给我的,除了设备,就是一个.net的动态库文件。

经朋友指点,安装了.NET Framework 4.0和IronPython 2.7之后,终于可以调用.net库了。我不确定的是,python环境下那些打包工具是否还是使用,因为脚本要在IronPython的解释器ipy.exe中运行——这是后话,需要在以后的应用中去实践。先说说实际应用中的稀奇古怪的问题吧。

我的核心任务有两个:读RFID标签、读写GPIO端口。前者相对简单,操作过程也非常顺利。后者就屡屡碰壁,到现在也没有彻底解决。

C#读GPIO端口的代码是这样的:

IOPinStatus[]inputPinsStatus=null;IOPinStatus[]outputPinsStatus=null;Reader.GetiOStatus(outinputPinsStatus,outoutputPinsStatus);

inputPinsStatus[i].pinStatus就是输入端口的状态,这是一个布尔型的变量。

IronPython需要先构造两个变量inputPinsStatus和outputPinsStatus,然后再调用GetIOStatus方法:

inputPinsStatus=clr.Reference[Array[bool]](())outputPinsStatus=clr.Reference[Array[bool]](())Reader.GetIOStatus(inputPinsStatus,outputPinsStatus)

inputPinsStatus是不能遍历的,必须使用inputPinsStatus.Value才可以。

C#写GPIO端口的代码是这样的(端口0写True):

IOPinStatus[]selectedOutPins=null;selectedOutPins=newIOPinStatus[6];selectedOutPins[0].pin=IOPins.PIN_0;selectedOutPins[0].pinStatus=True;Reader.SetOutputStatus(selectedOutPins);

IronPython代码是这样的:

outForSet=Array.CreateInstance(IOPinStatus,6)IOPinStatus.pin.SetValue(outForSet[0],IOPins.PIN_0)IOPinStatus.pinStatus.SetValue(outForSet[0],True)Reader.SetOutputStatus(outForSet)

这时,蹊跷事儿出现了:代码可以顺利执行,没有提示语法错误,设备也没有相应的动作!检查SetValue的结果,的确没有生效。本来这一句最初是这样写的:

outForSet[0].pinStatus=True

但系统提示:RuntimeWarning: Setting field Field on value type IOPinStatus may result in updating a copy. Use IOPinStatus.pinStatus.SetValue(instance, value) if this is safe. For more information help(IOPinStatus.pinStatus.SetValue).

改用SetValue之后,却好比对牛弹琴,什么反应也没有了。强烈郁闷中。

冥思苦想了一天之后,我发现了IOPinStatus的原型函数:

IOPinStatus.__doc__IOPinStatus(pin:IOPins,pinStatus:bool)

既然无法直接给变量的pin和pinStatus赋值,那么重新构造一个变量是否可行呢?

outForSet=Array.CreateInstance(IOPinStatus,6)outForSet[0]=IOPinStatus(IOPins.PIN_0,True)......Reader.SetOutputStatus(outForSet)

终于成功了!


如何用python读取json里面的值啊

1、首先需要在桌面新建‘’文件,内容为jsonline格式。 2、打开Python开发工具IDLE,新建‘’文件,并按照如图所示书写代码。 3、F5运行程序,Shell打印出json文本信息。 4、这是一次性读取所有内容,如果文件很大的情况,出于性能考虑要分批读取内容,这样要用到yield生成器,改写lines()函数如下,注意yield一定要写在with里,这样才能每次从上一次读取的位置继续读取。 5、继续写程序入口函数,这里要注意readlines返回的是一个列表,要读取里面的内容,要再做一个循环来遍历。 6、F5运行程序,Shell打印出json文本信息,这个利用生成器方式读取的方式经常处理较大的文件。

python判断变量类型时,为什么不推荐使用type方法

classA:passclassB(A):passa=A()b=B()print(aisanA:%s;bisanA:%s%(isinstance(a,A),isinstance(b,A)))print(typeofais%s;typeofbis%s%(type(a),type(b)))通常我们判断是什么类型,那么只是想直到这个对象是否含有我们所需要的方法或者属性,这样在调用的时候就不会出错,否则就要进行异常捕捉。 而isinstance这个方法非常满足这个需求。 以上是示例代码。 可以看出isinstance(a,A),isinstance(b,A)两个返回的都是True,如果我们把a,b都当做A的实例使用完全没问题,但是我们并不关心b是A的实例还是B的实例,因为他肯定包含A类定义中的所有属性和方法,正常调用不会出现异常。 type的话出来的则是一串字符串,精确到子类,所以可以用来做精确判断,例如判断是不是这个类,而不是这个类的子类,isinstance只能判断是不是这个类或者这个类的子类。 判断两个对象是否来自同一个类,可以用type(a)==type(b)来判断。

python从文件中查找数据并输出

#注意,这里的代码用单空格缩进importre#写上你的文件夹路径yourdir=keywordA=keywordAkeywordB=keywordA(\d+)files=[(yourdir,f)(yourdir)]withopen(,w)asfo:forfinfiles:fname=(f)withopen(f,r)():searchA=(keywordA,())ifsearchA:searchB=(keywordB,())ifsearchB:print(fname,()[0],sep=\t,file=fo)

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐