pythonでpythonを実行する

ブロックチェーンにトランザクションを通すpythonコードを書いたとき、これを連続して投げたい、そんな場合があります。

そもそも繰り返し実行するコードを1つのファイルに書けば良いのですが、完成したファイルを崩さずに外部ファイルとして実行して繰り返す方法にトライします。

こちらのpythonコードを1000回繰り返し実行するpythonコードを書いてみます。


ChatGPTに聞いてみた。

今回の要望をChatGPTに伝えてみました。

pythonで書かれたファイルcode1.pyとcode2.pyがあります。 実行の際はpython3 code1.pyやpython3 code2.pyで実行します。 ここで、code1.pyの中でpython3 code2.pyを実行するためのcode1.pyの中身を書いてください。

以下、ChatGPTの返答です。

Pythonで別のPythonスクリプトを実行するには、subprocessモジュールを使用するのが一般的です。以下に、code1.pyの中でpython3 code2.pyを実行する方法を示します。

code1.pyの内容

import subprocess

def run_code2():
    try:
        # "python3 code2.py" コマンドを実行
        result = subprocess.run(['python3', 'code2.py'], capture_output=True, text=True, check=True)
        # 実行結果を表示
        print("code2.pyの出力:")
        print(result.stdout)
    except subprocess.CalledProcessError as e:
        # エラーが発生した場合の処理
        print("code2.pyの実行中にエラーが発生しました:")
        print(e.stderr)

if __name__ == "__main__":
    print("code2.pyを実行します...")
    run_code2()

説明

  1. subprocess.run:

    • ['python3', 'code2.py']:python3でcode2.pyを実行するコマンド。

    • capture_output=True:標準出力と標準エラーをキャプチャ。

    • text=True:出力をバイト列ではなく文字列として取得。

    • check=True:実行が失敗した場合に例外を発生させる。

  2. エラー処理:

    • CalledProcessErrorをキャッチしてエラー内容を表示します。

  3. __main__ブロック:

    • code1.pyが直接実行された場合のみrun_code2を呼び出します。


この方法を使えば、code1.py内からcode2.pyを実行し、その出力やエラーを処理できます。

とのことでした。

ChatGPTの教えをもとにコードを書いてみた。

import subprocess
import time

def run_code2():
    try:
        # "python3 soneium_swap.py" コマンドを実行
        result = subprocess.run(['python3', 'soneium_swap.py'], capture_output=True, text=True, check=True)
        # 実行結果を表示
        print("soneium_swap.pyの出力:")
        print(result.stdout)
    except subprocess.CalledProcessError as e:
        # エラーが発生した場合の処理
        print("soneium_swap.pyの実行中にエラーが発生しました:")
        print(e.stderr)

if __name__ == "__main__":
    print("soneium_swap.pyを実行します...")
    for i in range(1000):
        print(str(i) + "回目")
        run_code2()
        time.sleep(180)

これで、soneium_swap.pyが3分ごとに計1000回実行されます。


いいなと思ったら応援しよう!