使用参数运行python脚本
我想从C调用Python脚本,并传递脚本中所需的一些参数。
我要使用的脚本是mrsync或多播远程同步。我通过调用以下命令从命令行进行了工作:
python mrsync.py -m /tmp/targets.list -s /tmp/sourcedata -t /tmp/targetdata
-m是包含目标ip地址的列表。-s是包含要同步的文件的目录。-t是目标计算机上将放置文件的目录。
到目前为止,通过使用以下C程序,我设法运行了没有参数的Python脚本:
Py_Initialize();
FILE* file = fopen("/tmp/myfile.py", "r");
PyRun_SimpleFile(file, "/tmp/myfile.py");
Py_Finalize();
这很好。但是,我找不到如何将这些参数传递给PyRun_SimpleFile(..)
方法的方法。
-
似乎您正在使用Python.h中的python开发API寻找答案。这是一个适合您的示例:
#My python script called mypy.py import sys if len(sys.argv) != 2: sys.exit("Not enough args") ca_one = str(sys.argv[1]) ca_two = str(sys.argv[2]) print "My command line args are " + ca_one + " and " + ca_two
然后通过C代码传递这些args:
//My code file #include <stdio.h> #include <python2.7/Python.h> void main() { FILE* file; int argc; char * argv[3]; argc = 3; argv[0] = "mypy.py"; argv[1] = "-m"; argv[2] = "/tmp/targets.list"; Py_SetProgramName(argv[0]); Py_Initialize(); PySys_SetArgv(argc, argv); file = fopen("mypy.py","r"); PyRun_SimpleFile(file, "mypy.py"); Py_Finalize(); return; }
如果可以将参数传递给C函数,则此任务将变得更加容易:
void main(int argc, char *argv[]) { FILE* file; Py_SetProgramName(argv[0]); Py_Initialize(); PySys_SetArgv(argc, argv); file = fopen("mypy.py","r"); PyRun_SimpleFile(file, "mypy.py"); Py_Finalize(); return; }
您可以直截了当。现在,为了节省时间,我的解决方案只使用了2个命令行参数,但是您可以对所有6个参数使用相同的概念…当然,还有更简洁的方法可以在python端捕获args,但是那只是基本的想法。
希望能帮助到你!