从Python解析参数到C++
我想知道如何从Python中改变C++/C程序里的参数值。
在下面的程序中,我使用牛顿-拉夫森方法来计算一个函数的根。
我想做的是把变量xn(初始猜测值)的值改成在Python界面中给定的某个值。
这个代码很简单,但我正在尝试一个更复杂的代码,在那里我需要改变一些变量的值,而不想每次都重新编译代码。
我可以写一个输入文件来避免再次编译代码,但我想要的是
更好地控制代码,比如在某个时间点暂停程序,改变变量的值,然后继续执行。
你能告诉我有没有简单的方法可以做到这一点吗?
谢谢。
#include <iostream>
using namespace std;
double first_derivative(double x)
{
double dummy;
// Parabolic Function
dummy = 2.0 * x + 7.0;
return (dummy);
}
double second_derivative(double x)
{
double dummy;
//Parabolic Function
dummy = 2.0 ;
return(dummy);
}
int main ()
{
double xn,fd,sd;
int i,n;
i=0;
xn=4.0 ;
cout << i << " " << xn << "\n" ;
for(i=0; i<10 ; i++) {
fd = first_derivative(xn);
sd = second_derivative(xn);
xn = xn - fd/sd ;
cout << i << " " << fd << " " << sd << " " << xn << "\n" ;
}
return 0;
}
3 个回答
我想这应该是为了测试吧?因为“在某个时间点停止程序,修改变量的值,然后继续执行”这个做法,只有在测试的时候才有意义。
如果是这样的话,这个链接可能对你有帮助:http://sourceware.org/gdb/wiki/PythonGdb。当然,这个方法只适用于你在使用gdb的情况下。
一种方法是使用 Boost Python:
Boost.Python 是一个 C++ 库,可以让 C++ 和 Python 这两种编程语言之间无缝对接。
听起来这正好符合你的需求。
另外,由于你的 C++ 程序不接受任何参数,你可以修改你的 main
函数,让它能够接受参数。
int main(int argc, char *argv[])
这里的 argc 是参数的数量,而 argv 是指向参数字符串的指针。你可以自己解析这些参数,或者使用类似 Boost.program_options 的工具。
然后,你可以通过 Python 的 subprocess 模块来调用这个程序。
如果你想让它像Python那样工作,最简单的办法就是直接用Python写。
你不能随便“改数字”来改变一个编译好的程序。不过,你可以让程序接受一些参数,然后在运行时再去修改这些参数。在C++中,你可以通过命令行参数、配置文件,或者直接询问用户输入来实现。这些方法都比涉及Python要简单。
如果因为某些原因,代码的某些部分必须用C++写,但你又特别想用Python,那你可以把C++的功能做成一个库,让Python来调用。一个常用的方法是SWIG。这样的话,你可以创建一些函数,在Python中调用它们,并传入你想要修改的参数。你的Python脚本只需要调用这些函数就可以了。