blob: 392f86d65ecc17754f5e0922ed1f0ee2b908408b [file] [log] [blame]
Inada Naokic88fece2019-04-13 10:46:21 +09001#define PY_SSIZE_T_CLEAN
Georg Brandl116aa622007-08-15 14:28:22 +00002#include <Python.h>
3
4int
5main(int argc, char *argv[])
6{
Srinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి)62b6cea2018-06-28 11:55:20 +05307 PyObject *pName, *pModule, *pFunc;
Georg Brandl116aa622007-08-15 14:28:22 +00008 PyObject *pArgs, *pValue;
9 int i;
10
11 if (argc < 3) {
12 fprintf(stderr,"Usage: call pythonfile funcname [args]\n");
13 return 1;
14 }
15
16 Py_Initialize();
Victor Stinner25e014b2014-08-01 12:28:49 +020017 pName = PyUnicode_DecodeFSDefault(argv[1]);
Georg Brandl116aa622007-08-15 14:28:22 +000018 /* Error checking of pName left out */
19
20 pModule = PyImport_Import(pName);
21 Py_DECREF(pName);
22
23 if (pModule != NULL) {
24 pFunc = PyObject_GetAttrString(pModule, argv[2]);
25 /* pFunc is a new reference */
26
27 if (pFunc && PyCallable_Check(pFunc)) {
28 pArgs = PyTuple_New(argc - 3);
29 for (i = 0; i < argc - 3; ++i) {
Christian Heimes217cfd12007-12-02 14:31:20 +000030 pValue = PyLong_FromLong(atoi(argv[i + 3]));
Georg Brandl116aa622007-08-15 14:28:22 +000031 if (!pValue) {
32 Py_DECREF(pArgs);
33 Py_DECREF(pModule);
34 fprintf(stderr, "Cannot convert argument\n");
35 return 1;
36 }
37 /* pValue reference stolen here: */
38 PyTuple_SetItem(pArgs, i, pValue);
39 }
40 pValue = PyObject_CallObject(pFunc, pArgs);
41 Py_DECREF(pArgs);
42 if (pValue != NULL) {
Christian Heimes217cfd12007-12-02 14:31:20 +000043 printf("Result of call: %ld\n", PyLong_AsLong(pValue));
Georg Brandl116aa622007-08-15 14:28:22 +000044 Py_DECREF(pValue);
45 }
46 else {
47 Py_DECREF(pFunc);
48 Py_DECREF(pModule);
49 PyErr_Print();
50 fprintf(stderr,"Call failed\n");
51 return 1;
52 }
53 }
54 else {
55 if (PyErr_Occurred())
56 PyErr_Print();
57 fprintf(stderr, "Cannot find function \"%s\"\n", argv[2]);
58 }
59 Py_XDECREF(pFunc);
60 Py_DECREF(pModule);
61 }
62 else {
63 PyErr_Print();
64 fprintf(stderr, "Failed to load \"%s\"\n", argv[1]);
65 return 1;
66 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +000067 if (Py_FinalizeEx() < 0) {
68 return 120;
69 }
Georg Brandl116aa622007-08-15 14:28:22 +000070 return 0;
71}