Python代码调用C/C++代码生成的exe可执行文件

1,900 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

 一、C/C++主函数main中参数argc和argv含义及用法

我们常见的主函数如下所示:

//C 语言中的主函数
#include <stdio.h>
int main(int argc, char* argv[])
{
	return 0;
}

//C++ 中的主函数
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
	return 0;
}

主函数也是一个函数,也能够由外部的程序调用,其中argcargv就是主函数的两个参数。

1、argc 是 argument count 的缩写,表示传入main函数的参数个数

2、argv 是 argument vector 的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0]一定包含了程序所在完整路径的名称,所以确切的说需要我们输入的main函数的参数个数应该是argc-1个,示例如下:

#include <iostream>
using namespace std;

void main(int argc, char* argv[])
{
	//打印所有的参数
	for (int i = 0; i < argc; i++)
		cout << "argument[" << i << "] is: " << argv[i] << endl;

	system("pause");
}

程序输出:

二、使用Python中的os.system()方法

使用os.system方法需要引入import os模块。(和C/C++中的System函数类似)

  1. 该函数用于将字符串转化为系统命令而执行。
  2. 该函数执行成功返回0,否则返回其他数字。返回的数字根据出错类型给出(1: Operation not permitted,2: No such file or directory …等)

示例:

import os

# 一些常用的网络命令
os.system("ping www.baidu.com")
os.system("ipconfig")

三、使用os.system调用exe文件

我们以C++程序为例,先编写一个加法函数,参数为a、b、c、d,返回a+b+c+d的值:

#include <iostream>
#include <string>
using namespace std;
//加法函数
int addNumber(int a, int b, int c, int d)
{
	return a + b + c + d;
}
//主函数
void main(int argc, char* argv[])
{
	int elem[4] = { 0 };//参数数组

	//将参数转换为整数
	//第0个参数为路径+文件名,所以i从1开始
	for (int i = 1; i < argc; i++)
		//stoi为string中的函数,即string to int,将字符串转换为整数
		elem[i - 1] = stoi(argv[i]);//将字符串转换为整数

	cout<<"addNumber函数的输出为:"<<addNumber(elem[0], elem[1], elem[2], elem[3]);

	system("pause");
}

将上述的C++代码编译执行,可能会报错,因为argv没有传入参数,会报出数组越界的错误,如下:

但是不会影响生成exe文件,将生成的exe文件和新建的python文件放在同一目录下(不放在同一路径下时,需要写绝对路径+文件名),在Python文件中写入如下代码

import os

a = input('请输入a:')
b = input('请输入b:')
c = input('请输入c:')
d = input('请输入d:')

os.system("addNumber.exe" +" "+a+" "+b+" "+c+" "+d)

注意,参数之间一定要用空格隔开

最后的输出如下: