gccコンパイルをPythonで自動化
追記
コマンド"make"を用いたり、シェルのヒストリを用いたりするとプログラムを書くほどでもなさそうです。
はじめに
現在、私はC言語の勉強をしているのですが、コンパイル時に、
gcc hello.c -o hello
と書くと大体書き間違えでコンパイルエラーが起きてしまいます。
コンパイルエラーが起きると上のコマンドをまた実行しないといけないので非常にめんどくさいです。笑
ということでPython様にお願いして自動化していきましょう。
コード作成
Pythonの標準ライブラリであるsubprocessを用いて自動化します。
subprocessはシェルの実行を行ってくれる便利なライブラリです。
試しに以下のコードを入力してみましょう。
# Windowsをお使いの方はこちらのコードを実行してください。
import subprocess
subprocess.run("dir", shell=True)
# Unix系OSをお使いの方はこちらのコードを実行してください。
import subprocess
subprocess.run("ls")
以上のコードを実行すると、あたかもコマンド上でdirもしくはlsを打ったような動作をするではありませんか!
なんて便利なんでしょう!
subprocess.run()の引数に制御したいコマンドを文字列として入力すればよいそうです。
オプションを指定するのにはリストを渡せばよいそうなのですが、今回はそこまで複雑ではないので正規表現のみで解決したいと思います。
# Windowsをお使いの方はこちらのコードを実行してください。
import subprocess
cfile = "hello"
subprocess.run("gcc " + cfile + ".c -o " + cfile, shell=True)
# Unix系OSをお使いの方はこちらのコードを実行してください。
import subprocess
cfile = "hello"
subprocess.run("gcc " + cfile + ".c -o " + cfile)
これでhello.cがコンパイルされhello.exeもしくはhello.outという実行可能形式のファイルが作成されたと思います。
さらにコンパイルが成功した場合、自動で実行されるようにしましょう。
コンパイルが成功したかどうかは以下の条件式がTrueとなればコンパイルが成功しています。
# Windowsをお使いの方はこちらのコードを実行してください。
import os
out_cfile = cfile + ".exe"
os.path.exists(out_cfile) # Trueの場合コンパイル成功
# Unix系OSをお使いの方はこちらのコードを実行してください。
import os
out_cfile = cfile + ".out"
os.path.exists(out_cfile) # Trueの場合コンパイル成功
完成コード
以上の知識をもとにプログラムを書きます。
使い方は出てくる説明通りに操作すればよいです。
# Windowsをお使いの方はこちらのコードを実行してください。
import subprocess
import os
while True:
cfile = input("ファイル名を入力してください:(拡張子をつける必要はありません。終了したい場合はexitと入力してください。)")
if cfile != "exit":
subprocess.run("gcc " + cfile + ".c -o " + cfile, shell=True)
out_cfile = cfile + ".exe"
if os.path.exists(out_cfile):
print("コンパイル完了! ファイル名: " + out_cfile)
ans = input("実行しますか?(はいの場合はEnterを押す。いいえの場合は任意のキーを押す。")
if ans == "":
subprocess.run(out_cfile)
else:
break
# Unix系OSをお使いの方はこちらのコードを実行してください。
import subprocess
import os
while True:
cfile = input("ファイル名を入力してください:(拡張子をつける必要はありません。終了したい場合はexitと入力してください。)")
if cfile != "exit":
subprocess.run("gcc " + cfile + ".c -o " + cfile, shell=True)
out_cfile = cfile
if os.path.exists(out_cfile):
print("コンパイル完了! ファイル名: " + out_cfile)
ans = input("実行しますか?(はいの場合はEnterを押す。いいえの場合は任意のキーを押す。")
if ans == "":
subprocess.run("./" + out_cfile)
else:
break
おわりに
簡素なプログラムではありますが、これを使うだけでC言語の勉強がはかどりそうです。
Pythonを使ってたらC言語勉強する意味あるのかと思っちゃいますよね笑
Unix系のOSはググった情報なので実行していません。
もし動かなければ私のせいです。コメントください。
Author And Source
この問題について(gccコンパイルをPythonで自動化), 我々は、より多くの情報をここで見つけました https://qiita.com/C0dalice/items/e37d46413d0dc1c1563a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .