2011-10-06 34 views
1

我想知道如何从python更改C++/C程序中参数的值。 在下面的程序中,我使用Newton-Raphson方法来计算函数的根。 我想要的是将变量xn的值(用于初始猜测)更改为在python界面中给定的某个 值。此代码非常简单,但我想要一个更大的代码 ,我需要更改某些变量的值,并且我不想在每次更改这些变量的值时编译代码 。将参数从python解析到C++

我可以为了避免再次编译代码编写的输入文件,但我要的是
更是控制代码,例如,在一定的时间步长和 变化停止程序中的变量的值并继续执行。 你能告诉我,如果有一个简单的方法来做到这一点?

问候。

#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; 
} 
+0

目前还不清楚你在问什么。你想简单地通过Python从命令行执行程序吗?如果是这样,google“argv”和“python os.system” – Chriszuma

+0

我想从python接口获取变量的值,然后运行用C/C++编写的程序。只使用C/C++的问题是我必须在每次更改变量时进行编译。 – armando

回答

1

如果你希望它像Python一样行事,那么最好是用Python编写它。

你不能只是“改变编译的程序的数字”。然而,你可以做的是让程序接受你在运行时改变的参数。您可以在C++中使用命令行参数,配置文件或要求输入来执行此操作。所有比涉及Python更容易。

如果由于某些原因,部分代码必须使用C++,而且您确实需要Python,那么您可以将C++例程作为库公开为Python。一种流行的做法是SWIG。然后你可以做的就是制作你可以从Python调用的函数,它将接受你的可变参数。你的Python脚本会简单地调用它们。

+0

我已经看到了一个来自互联网的代码,这些代码将一些变量的值从Tcl接口解析为C代码。他们写了一个带有变量值和模拟中使用的函数的脚本。 Tcl的问题在于它非常缓慢。我想执行分子动力学模拟,设置粒子数,温度,外场,质量等的值。然后在某个点改变其中的某些值,并继续进行模拟。 – armando

+0

这就是我想说的。您可以轻松设置您的C++程序来接受命令行输入。只需谷歌的'C++命令行输入' – Chriszuma

+0

@armando,你可以用Python做到这一点(我目前正在参与一个类似的项目),但是连接这两种语言并不是你可以在5分钟内完成的事情。最简单的解决方案是将这些参数放在一个配置文件中,SIM卡会在一段时间内检查一次。或者你可以用Python(和numpy/scipy)编写它。如果速度是一个问题尝试pypy或Cython。 – Adam

0

我会假设这是测试?因为这是“在特定时间段停止程序并更改变量值并继续执行”的唯一理由。

如果是这样,这可能接近您正在寻找的:http://sourceware.org/gdb/wiki/PythonGdb。当然,只有当你使用gdb时才有效。

+0

我想做一个分子动力学模拟,首先从系统的一些配置开始,让模拟运行一段时间。然后,我想停止模拟并更改一些参数,如温度或外部场,并让仿真继续。我可以用其他方式做到这一点,但我只是想知道是否可以从Python界面。 – armando

+0

然后一个基于调试器的方法是做错的一种方法。 –

1

一种方法是使用Boost Python

Boost.Python的,一个C++库使C++和Python编程语言之间的无缝互操作 。

听起来像它符合你的要求。

或者,因为您的C++程序不接受任何参数。您可以更改您的main函数以接受参数。

int main(int argc, char *argv[]) 

argc包含参数个数,argv是指向参数字符串的指针。 你可以自己解析它或使用像Boost.program_options这样的东西。

然后可以使用Python subprocess从python调用该程序。

+0

这就是我正在寻找的。谢谢。 – armando

+0

请接受然后;) –