Run a python script with arguments

前端 未结 2 1611
借酒劲吻你
借酒劲吻你 2020-11-29 03:55

I want to call a Python script from C, passing some arguments that are needed in the script.

The script I want to use is mrsync, or multicast remote sync. I got this

2条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-11-29 04:11

    Seems like you're looking for an answer using the python development APIs from Python.h. Here's an example for you that should work:

    #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
    

    And then the C code to pass these args:

    //My code file
    #include 
    #include 
    
    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;
    }
    

    If you can pass the arguments into your C function this task becomes even easier:

    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;
    }
    

    You can just pass those straight through. Now my solutions only used 2 command line args for the sake of time, but you can use the same concept for all 6 that you need to pass... and of course there's cleaner ways to capture the args on the python side too, but that's just the basic idea.

    Hope it helps!

提交回复
热议问题