使用C API将命令行参数传递给python 2.7.6包应用程序

使用C API将命令行参数传递给python 2.7.6包应用程序,python,python-2.7,python-c-api,Python,Python 2.7,Python C Api,我是python新手,现在需要使用其C API调用python 2.7.6程序 python程序采用的是a的形式,并采用了几个命令行选项。您可以这样运行它: python my\u py\u app input.txt--option1=“value1”--option2=“value2” 以下是我一直在做的事情: 1、使用Py_Initialize()设置python API 2、使用PyImport\u ImportModule(“my\u py\u app”)加载该包,它返回一个有效的Py

我是python新手,现在需要使用其C API调用python 2.7.6程序

python程序采用的是a的形式,并采用了几个命令行选项。您可以这样运行它:

python my\u py\u app input.txt--option1=“value1”--option2=“value2”

以下是我一直在做的事情:

1、使用Py_Initialize()设置python API

2、使用
PyImport\u ImportModule(“my\u py\u app”)
加载该包,它返回一个有效的
PyObject

3.我不知道该怎么做

python C API文档包含许多函数,如
PyEval\u CallXXX
。我需要调用哪一个以及如何将选项/值对传递给程序?

您正在寻找函数

以下问题提供了更多信息和示例:


$find
.
/件c
/mymod
./mymod/\uuuuu init\uuuuuuu.py
./mymod/\uuuuu main\uuuuuuuu.py
$cat./mymod/\uuuuu init\uuuuuuu.py
$cat./mymod/\uuuuu main\uuuuuuuu.py
导入系统
打印'hello',''.join(sys.argv[1:])
$python mymod world
你好,世界
$cat./py.c
#包括
#包括
内部主(空)
{
int-argc;
char*argv[2];
argc=2;
argv[0]=“mymod”;
argv[1]=“世界”;
Py_SetProgramName(argv[0]);
Py_初始化();
PySys_SetArgv(argc,argv);
PyImport_ImportModule(“mymod.\uuuu main_uu__;”);
Py_Finalize();
返回0;
}
$gcc`python2.7-config--cflags--ldflags`py.c
美元/年
你好,世界
$

谢谢,我在发布我的问题之前已经检查了这个问题。问题是我的py应用程序不是py文件,它是一个python包(文件夹),因此那里的答案似乎不适用于我。确实如此。如果按照您的问题所示,该包读取的是
sys.argv
,那么该函数就是您要查找的函数。假设我已经使用PySys\u SetArgv设置了参数,那么接下来该怎么办?在您给出的问题中,有FILE*FILE=fopen(“mypy.py”,“r”);PyRun_SimpleFile(文件“mypy.py”);但是我没有文件,所以我似乎不能调用PyRun…如果你调用这个函数,然后像你已经做的那样导入模块,它应该给模块参数,它应该可以工作。如果没有,您可以创建一个小脚本来包装包,并使用另一个问题中的示例代码调用它。
$ find
.
./py.c
./mymod
./mymod/__init__.py
./mymod/__main__.py
$ cat ./mymod/__init__.py
$ cat ./mymod/__main__.py
import sys

print 'hello', ' '.join(sys.argv[1:])
$ python mymod world
hello world
$ cat ./py.c
#include <stdio.h>
#include <python2.7/Python.h>

int main(void)
{
    int argc;
    char * argv[2];

    argc = 2;
    argv[0] = "mymod";
    argv[1] = "world";

    Py_SetProgramName(argv[0]);
    Py_Initialize();
    PySys_SetArgv(argc, argv);
    PyImport_ImportModule("mymod.__main__");
    Py_Finalize();

    return 0;
}
$ gcc `python2.7-config --cflags --ldflags` py.c
$ ./a.out
hello world
$