Hallo everyone,
I'm trying to convert a main function from C to Python,by using Swig and call it with a .txt argument.The code is the following : -
/*test.c*/
-
#include <stdio.h>
-
int main(int argc, char ** argv)
-
{
-
float f1,f2,f3;
-
FILE *fp;
-
fp=fopen(argv[1],"r");
-
if(fp!=NULL)
-
{
-
printf("Succesfull opening\n");
-
fscanf(fp,"%f\n%f\n%f",&f1,&f2,&f3);
-
printf("the values are \n%f\n%f\n%f\n",f1,f2,f3);
-
fclose(fp);
-
}
-
return 0;
-
}
-
-
/*test_interface.i*/
-
%module example
-
%{
-
int main(int argc,char **argv);
-
%}
-
int main(int argc,char **argv);
-
-
/*text.txt*/
0.2313
2.3123
12.123
from Linux command prompt I execute the following commands:
$ swig -python test_interface.i
$ gcc -c test.c test_interface_wrap.c -I/usr/include/python2.5
$ ld -shared test.o test_interface_wrap.o -o _example.so
$ python
>>>from _example import *
>>>main(1,'text1.txt') // ERROR !!!!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: in method 'main', argument 2 of type 'char **'
All i want to do is the same thing like the following C procces:
$ gcc test.c -o test
$ ./test text.txt
the values are
0.231300
2.312300
12.123000
What is the solution?
7 7324
Hallo everyone,
I'm trying to convert a main function from C to Python,by using Swig and call it with a .txt argument.The code is the following :
/*test.c*/
#include <stdio.h>
int main(int argc, char ** argv)
{
float f1,f2,f3;
FILE *fp;
fp=fopen(argv[1],"r");
if(fp!=NULL)
{
printf("Succesfull opening\n");
fscanf(fp,"%f\n%f\n%f",&f1,&f2,&f3);
printf("the values are \n%f\n%f\n%f\n",f1,f2,f3);
fclose(fp);
}
return 0;
}
/*test_interface.i*/
%module example
%{
int main(int argc,char **argv);
%}
int main(int argc,char **argv);
/*text.txt*/
0.2313
2.3123
12.123
from Linux command prompt I execute the following commands:
$ swig -python test_interface.i
$ gcc -c test.c test_interface_wrap.c -I/usr/include/python2.5
$ ld -shared test.o test_interface_wrap.o -o _example.so
$ python
>>>from _example import *
>>>main(1,'text1.txt') // ERROR !!!!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: in method 'main', argument 2 of type 'char **'
All i want to do is the same thing like the following C procces:
$ gcc test.c -o test
$ ./test text.txt
the values are
0.231300
2.312300
12.123000
What is the solution?
hi
just post your test_interface_wrap.c file
varun
hallo varun
Thanks for your answer .test_interface_wrap.c is about 2.700 lines .it is helpfull to post it?
hallo varun
Thanks for your answer .test_interface_wrap.c is about 2.700 lines .it is helpfull to post it?
only post lines of function
SWIG_wrap_main(...) or something like that
Hallo again verun
I hope the following code of interface_wrap.c is helpful.Thank you again. -
extern "C" {
-
#endif
-
SWIGINTERN PyObject *_wrap_main(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-
PyObject *resultobj = 0;
-
int arg1 ;
-
char **arg2 = (char **) 0 ;
-
int result;
-
int val1 ;
-
int ecode1 = 0 ;
-
void *argp2 = 0 ;
-
int res2 = 0 ;
-
PyObject * obj0 = 0 ;
-
PyObject * obj1 = 0 ;
-
-
if (!PyArg_ParseTuple(args,(char *)"OO:main",&obj0,&obj1)) SWIG_fail;
-
ecode1 = SWIG_AsVal_int(obj0, &val1);
-
if (!SWIG_IsOK(ecode1)) {
-
SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "main" "', argument " "1"" of type '" "int""'");
-
}
-
arg1 = (int)(val1);
-
res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_p_char, 0 | 0 );
-
if (!SWIG_IsOK(res2)) {
-
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "main" "', argument " "2"" of type '" "char **""'");
-
}
-
arg2 = (char **)(argp2);
-
result = (int)main(arg1,arg2);
-
resultobj = SWIG_From_int((int)(result));
-
return resultobj;
-
fail:
-
return NULL;
-
}
-
-
-
static PyMethodDef SwigMethods[] = {
-
{ (char *)"main", _wrap_main, METH_VARARGS, NULL},
-
{ NULL, NULL, 0, NULL }
-
};
-
-
-
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-
-
static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
-
static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
-
-
static swig_type_info *swig_type_initial[] = {
-
&_swigt__p_char,
-
&_swigt__p_p_char,
-
};
-
-
static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
-
static swig_cast_info _swigc__p_p_char[] = { {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}};
-
-
static swig_cast_info *swig_cast_initial[] = {
-
_swigc__p_char,
-
_swigc__p_p_char,
-
};
-
-
-
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */
-
-
static swig_const_info swig_const_table[] = {
-
{0, 0, 0, 0.0, 0, 0}};
-
-
#ifdef __cplusplus
-
}
Hallo again verun
I hope the following code of interface_wrap.c is helpful.Thank you again.
extern "C" {
#endif
SWIGINTERN PyObject *_wrap_main(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
int arg1 ;
char **arg2 = (char **) 0 ;
int result;
int val1 ;
int ecode1 = 0 ;
void *argp2 = 0 ;
int res2 = 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"OO:main",&obj0,&obj1)) SWIG_fail;
ecode1 = SWIG_AsVal_int(obj0, &val1);
if (!SWIG_IsOK(ecode1)) {
SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "main" "', argument " "1"" of type '" "int""'");
}
arg1 = (int)(val1);
res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_p_char, 0 | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "main" "', argument " "2"" of type '" "char **""'");
}
arg2 = (char **)(argp2);
result = (int)main(arg1,arg2);
resultobj = SWIG_From_int((int)(result));
return resultobj;
fail:
return NULL;
}
static PyMethodDef SwigMethods[] = {
{ (char *)"main", _wrap_main, METH_VARARGS, NULL},
{ NULL, NULL, 0, NULL }
};
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
static swig_type_info *swig_type_initial[] = {
&_swigt__p_char,
&_swigt__p_p_char,
};
static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_char[] = { {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info *swig_cast_initial[] = {
_swigc__p_char,
_swigc__p_p_char,
};
/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */
static swig_const_info swig_const_table[] = {
{0, 0, 0, 0.0, 0, 0}};
#ifdef __cplusplus
}
hi
sorry for the late responce
i think you need to manually write for (int argc,char *argv[])
try this code in your .i file - %typemap(in) (int argc, char *argv[]) {
-
int i;
-
if (!PyList_Check($input)) {
-
PyErr_SetString(PyExc_ValueError, "Expecting a list");
-
return NULL;
-
}
-
$1 = PyList_Size($input);
-
$2 = (char **) malloc(($1+1)*sizeof(char *));
-
for (i = 0; i < $1; i++) {
-
PyObject *s = PyList_GetItem($input,i);
-
if (!PyString_Check(s)) {
-
free($2);
-
PyErr_SetString(PyExc_ValueError, "List items must be strings");
-
return NULL;
-
}
-
$2[i] = PyString_AsString(s);
-
}
-
$2[i] = 0;
-
}
-
-
%typemap(freearg) (int argc, char *argv[]) {
-
if ($2) free($2);
-
}
I try to and it works. Thank you a lot varuns.
Hello, varuns.
I also meet a similar question, I don't know how to deal with the arguments of the main() function, should I replace the main() function in the c file? Thanks
Sign in to post your reply or Sign up for a free account.
Similar topics
by: timothy.williams |
last post by:
Hi.
I trying to write an extension module to call some C libraries so I can
use them in Python. Several of the library functions pass pointers to
structures as arguments. I was thinking that I...
|
by: Morgan |
last post by:
I have read much posts on the argument but no one
clearly says if this operation is possible or not.
Simply I have a routine which reads from a text
file some integer arrays (1 or 2D).
The...
|
by: tony.ha |
last post by:
Hello,
I have open a Python program in the IDLE, but when I select the "run
module" under "run" menu, it
does not allow me to pass an argument to my Python program!
How do you pass an argument...
|
by: Bill |
last post by:
Hello All,
I am trying to pass a struct to a function. How would that best be
accomplished?
Thanks,
Bill
|
by: erikcw |
last post by:
Hi,
I'm getting the following error when I try to pass a list into a
function.
My List: crea =
Traceback (most recent call last):
File "wa.py", line 118, in ?
curHandler.walkData()
|
by: Robert Dailey |
last post by:
Hi,
I noticed in Python all function parameters seem to be passed by
reference. This means that when I modify the value of a variable of a
function, the value of the variable externally from the...
|
by: lisp9000 |
last post by:
I've read that C allows two ways to pass information between
functions:
o Pass by Value
o Pass by Reference
I was talking to some C programmers and they told me there is no such
thing as...
|
by: =?Utf-8?B?U3dhcHB5?= |
last post by:
Can anyone suggest me to pass more parameters other than two parameter for
events like the following?
Event:
Onbutton_click(object sender, EventArgs e)"
Event handler:
button.Click += new...
|
by: raylopez99 |
last post by:
Keywords: scope resolution, passing classes between parent and child
forms, parameter constructor method, normal constructor, default
constructor, forward reference, sharing classes between forms....
|
by: ryjfgjl |
last post by:
ExcelToDatabase: batch import excel into database automatically...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM).
In this month's session, we are pleased to welcome back...
|
by: ArrayDB |
last post by:
The error message I've encountered is; ERROR:root:Error generating model response: exception: access violation writing 0x0000000000005140, which seems to be indicative of an access violation...
|
by: PapaRatzi |
last post by:
Hello,
I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
|
by: CloudSolutions |
last post by:
Introduction:
For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
|
by: Defcon1945 |
last post by:
I'm trying to learn Python using Pycharm but import shutil doesn't work
|
by: af34tf |
last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you
|
by: Faith0G |
last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome former...
| | |