二、Python调用C/C++\x0d\\x0d\\x0d\1、Python调用C动态链接库\x0d\\x0d\ Python调用C库比较简单,不经过任何封装打包成so,再使用python的ctypes调用即可。\x0d\(1)C语言文件:pycallc\x0d\\x0d\[html] view plain copy \x0d\/gcc -o libpycallso -shared -fPIC pycallc/ \x0d\#include \x0d\#include \x0d\int foo(int a, int b) \x0d\{ \x0d\ printf("you input %d and %d\n", a, b); \x0d\ return a+b; \x0d\} \x0d\(2)gcc编译生成动态库libpycallso:gcc -o libpycallso -shared -fPIC pycallc。使用g++编译生成C动态库的代码中的函数或者方法时,需要使用extern "C"来进行编译。\x0d\(3)Python调用动态库的文件:pycallpy\x0d\\x0d\[html] view plain copy \x0d\import ctypes \x0d\ll = ctypescdllLoadLibrary \x0d\lib = ll("/libpycallso") \x0d\libfoo(1, 3) \x0d\print 'finish' \x0d\(4)运行结果:\x0d\\x0d\\x0d\2、Python调用C++(类)动态链接库 \x0d\\x0d\ 需要extern "C"来辅助,也就是说还是只能调用C函数,不能直接调用方法,但是能解析C++方法。不是用extern "C",构建后的动态链接库没有这些函数的符号表。\x0d\(1)C++类文件:pycallclasscpp\x0d\\x0d\[html] view plain copy \x0d\#include \x0d\using namespace std; \x0d\ \x0d\class TestLib \x0d\{ \x0d\ public: \x0d\ void display(); \x0d\ void display(int a); \x0d\}; \x0d\void TestLib::display() { \x0d\ cout \x0d\using namespace std; \x0d\int test() \x0d\{ \x0d\ int a = 10, b = 5; \x0d\ return a+b; \x0d\} \x0d\int main() \x0d\{ \x0d\ cout \x0d\#include \x0d\#include \x0d\ \x0d\int fac(int n) \x0d\{ \x0d\ if (n 回答于 2022-11-16
在多个文件或者不同语言协同的项目中,python 脚本经常需要从命令行直接读取参数。下面我们通过几个例子来学习 argparse 。
我们先创建一个脚本 progpy ,然后输入如下内容:
下面我们在 shell 中进行测试:
我们可以看出: progpy 仅仅只有可选参数 -help 与其短写 -h ,为了传入更加复杂的参数,下面我们需要借用 parseradd_argument() 。
positional arguments
用法是不用带 - ,改写 progpy 为
测试结果:
定义了一个叫 e 的参数,默认必选,分析:
optional arguments,有两种方式:
这两种方式可以同存,也可以只存在一个,修改 progpy 内容如下:
测试结果:
通过图 3 我们很容易便明白可选参数的用法,但是 -v 必须指定参数值,否则就会报错,有没有像 -h 那样,不需要指定参数值的呢,答案是有,通过定义参数时指定 action="store_true" 即可,用法如下:
测试结果:
-v 没有指定任何参数也可,其实存的是 True 和 False ,如果出现,则其值为 True ,否则为 False :
默认的参数类型为 str ,如果要进行数学计算,需要在参数进行解析后进行类型转换,如果不能转换则会报错:
测试与结果:
2 中的 action 的例子中定义了默认值为 True 和 False 的方式,如果要限定某个值的取值范围,比如 3 中的整型,限定其取值范围为 0, 1, 2:
测试结果:
argparseArgumentParser(description="calculate X to the power of Y")
打印帮助信息时即显示 calculate X to the power of Y :
上个例子中定义了互斥参数:
第 4 行定义了一个互斥组,第 5, 6 行在互斥组中添加了 -v 和 -q 两个参数,用上个例子中的程序进行如下测试:
可以看出, -q 和 -v 不出现,或仅出现一个都可以,同时出现就会报错。
测试结果如下:
更多详细内容见: argparse — d2py 01 文档 (xinetzonegithubio)
给出一个简单的线程互斥的例子,例子中同时启动两个线程,a线程获取锁,获取后b线程处于等待状态,只有a线程释放锁,才能进入b线程。代码如下:
import threadingimport time
def hello(name):
print(name + ' started')
lockacquire(True)
timesleep(50)
print(name + ' running')
lockrelease()
print(name + ' exit')
lock = threadingLock()
a = threadingThread(target=hello,args='a')
b = threadingThread(target=hello,args='b')
astart()
bstart()
以上就是关于怎样让Python脚本与C++程序互相调用全部的内容,包括:怎样让Python脚本与C++程序互相调用、✍️python argparse 用法总结、在python里我想在一个线程里的方法去休眠另一个同在同一个进程下的线程50s,需要怎么办等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)