gpt4 book ai didi

python - 运行带参数的 python 脚本

转载 作者:太空宇宙 更新时间:2023-11-04 04:14:54 24 4
gpt4 key购买 nike

我想从 C 调用 Python 脚本,传递脚本中需要的一些参数。

我要使用的脚本是mrsync,或者multicast remote sync .我通过调用从命令行获得了这个:

python mrsync.py -m /tmp/targets.list -s /tmp/sourcedata -t /tmp/targetdata

-m is the list containing the target ip-addresses. -s is the directory that contains the files to be synced. -t is the directory on the target machines where the files will be put.

到目前为止,我通过使用以下 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 代码:

//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 端也有更简洁的方法来捕获参数,但是这只是基本的想法。

希望对您有所帮助!

关于python - 运行带参数的 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53172669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com