情報処理技術者試験解説チャンネル

応用情報技術者試験をはじめとする情報処理技術者試験の午後問題では、「過去10年分を確実に理解しているか」が合格ラインを左右するといわれています。当チャンネルでは、その10年分の午後問題を要点だけに絞り、約10分のコンパクトな解説としてまとめました。限られた時間でも効率よく学習を進められる構成です。

PythonからC++プログラムを呼び出して引数を受け渡す方法

                    ## PythonからC++プログラムを呼び出して引数を受け渡す方法

PythonC++は、それぞれ異なるプログラミング言語ですが、両者を組み合わせて使用することで、Pythonの柔軟性とC++のパフォーマンスを組み合わせることができます。この記事では、PythonからC++プログラムを呼び出して引数を受け渡す方法について解説します。具体的には、Pythonsubprocessモジュールを使用してC++プログラムを実行し、引数を渡す方法について説明します。

Pythonのsubprocessモジュールについて

Pythonsubprocessモジュールは、外部プロセスを生成および制御するための機能を提供します。このモジュールを使用すると、Pythonから外部プログラムを呼び出したり、外部プログラムとの間でデータを受け渡したりすることができます。subprocessモジュールは、Pythonの標準ライブラリに含まれており、追加のインストールは不要です。

C++プログラムの作成

まず、Pythonから呼び出すC++プログラムを作成します。以下は、簡単なC++プログラムの例です。このプログラムは、引数として文字列を受け取り、それを大文字に変換して出力します。

#include <iostream>
#include <string>
#include <algorithm>

int main(int argc, char* argv[]) {
    if (argc != 2) {
        std::cerr << "Usage: " << argv[0] << " <string>" << std::endl;
        return 1;
    }
    
    std::string str = argv[1];
    std::transform(str.begin(), str.end(), str.begin(), ::toupper);
    std::cout << "Upper case string: " << str << std::endl;
    
    return 0;
}

このプログラムでは、argcargv[]を使用してコマンドライン引数を受け取り、受け取った文字列を大文字に変換して出力しています。

PythonからC++プログラムを呼び出す

次に、Pythonから上記のC++プログラムを呼び出して、引数を受け渡す方法を見ていきましょう。以下のPythonコードは、subprocessモジュールを使用してC++プログラムを呼び出し、引数として文字列を渡しています。

import subprocess

def call_cpp_program(input_string):
    command = ["./cpp_program", input_string]
    result = subprocess.run(command, capture_output=True, text=True)
    if result.returncode == 0:
        print("C++プログラムの実行結果:", result.stdout)
    else:
        print("C++プログラムの実行中にエラーが発生しました:", result.stderr)

# C++プログラムを呼び出す
input_string = "Hello, World!"
call_cpp_program(input_string)

このPythonコードでは、subprocess.run()関数を使用してC++プログラムを実行しています。subprocess.run()関数は、指定したコマンドを実行し、その結果を返します。capture_output=Trueを指定することで、標準出力および標準エラー出力をキャプチャし、text=Trueを指定することで、文字列として結果を受け取ります。

実行結果

上記のPythonコードを実行すると、以下のような出力が得られます。

C++プログラムの実行結果: UPPER CASE STRING: HELLO, WORLD!

これにより、PythonからC++プログラムを呼び出して、引数を受け渡すことができました。

まとめ

この記事では、PythonからC++プログラムを呼び出して引数を受け渡す方法について解説しました。subprocessモジュールを使用することで、PythonC++を組み合わせてプログラムを開発する際に柔軟性が向上します。Pythonの柔軟性とC++のパフォーマンスを組み合わせて、より効率的なプログラムを開発するために、この方法を活用してみてください。