C++ PR

PythonからC/C++を呼ぶ -標準入出力とsubprocessの使い方-

標準入出力でPythonとC/C++連携
記事内に商品プロモーションを含む場合があります

こんにちは。

現役エンジニアの”はやぶさ”@Cpp_Learningです。

PythonとC/C++を連携したい!と思い”Python C API”に関する記事を書きました↓

”Python C API”は使いこなせれば、強力な武器になります!

しかし、参照カウントなどの注意点があり、使うときに少し身構えてしまいます。

あまり処理速度を気にしないから、もっと気軽にPythonからC/C++を使いたい!

という日もあるので、標準入出力を使って手軽にPythonと他言語を連携する方法を考えました。

標準入力・標準出力

例えば、標準入出力で”2 + 3 = 5”を演算する流れを図解で説明します↓

標準入出力

コマンドラインに数値やコマンドを入力し、ファイルを操作することを「標準入力」と言います。
↑の例ではキーボードを使って標準入力をしています。

ファイルが処理結果などをコマンドラインに出力(表示)することを「標準出力」と言います。
↑の例ではファイルが2, 3を受け取り、演算結果を標準出力しています。

つまり、標準入出力とはコマンドライン経由で任意のファイルとやり取りすることです。

  • 標準入力:コマンドライン経由でファイルを操作すること
  • 標準出力:ファイルが処理結果などをコマンドラインに出力すること

標準入出力による連携

次に標準入出力により、PythonとC/C++を連携する流れを図解で説明します。

標準入出力でPythonとC/C++連携

先ほどユーザーがキーボードから標準入力をしていた部分をPythonに置き換えます!

以上!

ユーザーがインターフェースで操作していた部分をPythonのソースファイルに置き換えれば、コマンドライン経由でC/C++ソースファイルと連携できます。

スポンサーリンク

【実践】標準入出力によるPythonとC++の連携

最初に実施手順を説明しておきます。

【標準入出力によるPythonとC++の連携手順】

  1. C++にさせたい処理(c = a + b)のソースコードを作成※
  2. キーボードによる標準入力でC++ソースコードの動作確認
  3. キーボードによる標準入力をPythonに置き換えるソースコードを作成
  4. PythonとC++連携の動作確認

※a, bの値は標準入力で渡します

つまり、下図の上段⇒下段の順に動作確認します。

標準入出力でPythonとC/C++連携

標準入力された値の演算結果を標準出力するC++コード作成

標準入力された値の演算結果を標準出力するC++ソースコードを作成します。

ポイントは以下の通りです。

キーボードによる標準入力でC++コードの動作確認

作成したC++ソースファイル(add.cpp)を以下のコマンドでコンパイルします。

g++ add.cpp

add.cppの保存先と同じ場所に”a.out”という実行ファイルが生成されます。

”a.out”以外の名前で実行ファイルを生成したい場合は、以下のコマンドを使います。

g++ -o myModule add.cpp

これで”myModule”という実行ファイルが生成されます。

(本記事では”a.out”を使います)

以下のコマンドで”a=2, b=3”のときの”c = a + b”を演算します。

./a.out 2 3

演算結果の”5”が出力(表示)されれば動作確認完了です。

一連の流れを実施したときのターミナル画面は以下の通りです。

C/C++の標準入出力サンプルプログラム

キーボードによる標準入力をPythonコードに置き換え

さきほどはキーボードで以下のコマンドを入力しました。

./a.out 2 3

↑の処理をPythonにやらせます。

ポイントは以下の通りです。

  • str(a), str(b)で数値を文字列に変換
  •  ”./a.out 2 3”というコマンド(cmd)を作成
  • subprocess.check_outputでコマンド(cmd)入力⇒演算結果取得
  • 取得した演算結果は文字列なのでfloat(c)で数値に変換
  • 演算結果cに+1する
スポンサーリンク

PythonとC++連携の動作確認

作成したPythonコード(main.py)を以下のコマンドで実行します。

python main.py

C++の演算結果”5.5”に+1した”6.5”が出力(表示)されれば動作確認完了です。

一連の流れを実施したときのターミナル画面は以下の通りです。

Pythonの標準入出力サンプルプログラム

実行環境

本記事で紹介したソースコードは以下の記事で紹介しているWSL(Windows Subsystem for Linux)で動作確認しました。

VSCodeからWSLを使う
【WSL】Windows10とUbuntuとVSCodeで快適なプログラミング環境を構築Windows Subsystem for Linux(WSL)とVisual Studio Code(VSCode)で快適なプログラミング環境を構築する方法を説明します。C言語とC++とPythonなどのプログラミング言語を使う人にオススメの記事です。...

C++とPythonが動く環境ならWindows/Linuxどちらでも動きます

まとめ

標準入出力を使って手軽にPythonとC++を連携する方法を説明しました。

私がよく使うので、PythonとC++という組み合わせにしましたが、標準入出力が行えるプログラミング言語の組み合わせであれば、今回説明した方法で連携できます。

標準入出力を行う時間が気にならない場合にはオススメの連携方法です。

”あなた”の好きな2つのプログラミング言語を連携すれば、面白いことができるかも!

プログラミングを楽しんで下さいね!

はやぶさ
はやぶさ
理系応援ブロガー”はやぶさ”@Cpp_Learningは頑張る理系を応援します!

PICK UP BOOKS

  • 数理モデル入門
    数理モデル
  • Jetoson Nano 超入門
    Jetoson Nano
  • 図解速習DEEP LEARNING
    DEEP LEARNING
  • Pythonによる因果分析
    Python