使用参数从Python调用C / C ++代码

时间:2016-12-01 22:10:32

标签: python c++ c arguments

我读过类似的帖子但没有具体的内容。或许我的逻辑不正确,你可以纠正我。

我想做的事情:

编写python代码,然后调用已编译的C或C ++代码。但是,如果它已经被编译,我将如何将参数传递给该C / C ++脚本?

我在Python中有一个操作Excel文件的程序。然后在某些时候我需要搜索,追加并创建一个包含10,000个单元格的数组。我认为C / C ++会让这个更快,因为python花了一些时间来做到这一点。

请帮助。

1 个答案:

答案 0 :(得分:2)

假设我们想在 C二进制文件之上编写一个 Python脚本作为包装器,并从终端传递参数到C二进制文件。首先,按如下方式创建test.c C程序:

#include <stdio.h>

int main(int argc, char *argv[])
{
   if(argc > 1)
   {
      int i;
      printf("C binary: ");
      for(i = 0; i < argc; i++)
         printf("%s ", argv[i]);
      printf("\n");
   }
   else
      printf("%s: No argument is provided!\n", argv[0]);
   return(0);
}

然后使用:

编译它
gcc -o test test.c

使用以下命令运行两个伪参数:

./test arg1 arg2

现在,回到你的问题。我如何将参数从Python传递给C二进制文件。首先,您需要一个Python脚本来从终端读取参数。 test.py会为您做到这一点:

import os
import sys

argc = len(sys.argv)
argv =  sys.argv

if argc > 2:
   cmd = './'
   for i in range(1,argc):
      cmd = cmd + argv[i] + ' '
   if os.path.isfile(argv[1]):
      print('Python script: ', cmd)
      os.system(cmd)
   else:
      print('Binary file does not exist')
      bin = 'gcc -o ' + argv[1] + ' '+ argv[1] + '.c'
      print(bin)
      os.system(bin)
      if os.path.isfile(argv[1]):
         os.system(cmd)
      else:
         print('Binary source does not exist')
         exit(0)
else:
   print('USAGE: python3.4', argv[0], " BINARY_FILE INPUT_ARGS");
   exit(0)

test.ctest.py放在同一目录中。现在,您可以使用以下命令将参数从终端传递到test C二进制文件:

python3.4 test.py test arg1 arg2

最后,输出将是:

Python script:  ./test arg1 arg2
C binary: ./test arg1 arg2

最后两句话:

  • 即使您没有编译源代码,test.py也会查找test.c源文件并尝试编译它。
  • 如果您不想从终端传递参数,您可以随时在Python脚本中定义参数并将它们传递给C二进制文件。