我读过类似的帖子但没有具体的内容。或许我的逻辑不正确,你可以纠正我。
我想做的事情:
编写python代码,然后调用已编译的C或C ++代码。但是,如果它已经被编译,我将如何将参数传递给该C / C ++脚本?
我在Python中有一个操作Excel文件的程序。然后在某些时候我需要搜索,追加并创建一个包含10,000个单元格的数组。我认为C / C ++会让这个更快,因为python花了一些时间来做到这一点。
请帮助。
答案 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.c
和test.py
放在同一目录中。现在,您可以使用以下命令将参数从终端传递到test
C二进制文件:
python3.4 test.py test arg1 arg2
最后,输出将是:
Python script: ./test arg1 arg2
C binary: ./test arg1 arg2
最后两句话:
test.py
也会查找test.c
源文件并尝试编译它。