Python程式碼呼叫C/C++程式碼生成的exe可執行檔案

2021-05-04 08:00:12

一、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)

注意,引數之間一定要用空格隔開

最後的輸出如下: