プロが教える店舗&オフィスのセキュリティ対策術

process.py↓
import time

time.sleep(5)
input("エンターキーを押してください。")

このプログラムをsubprocessの関数で動かして、input()に値を渡すにはどのようにしたら良いですか?

質問者からの補足コメント

  • inputに渡すものは文字です。数値やEnterを待つだけのものではありません。
    回答宜しくお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/07/27 14:40
  • input()の引数の"エンターキーを押してください"は完全にミスです。申し訳ありません。
    正しくは"文字を入力してください"です。

    通常通りコマンドプロンプトでprocess.pyを動かすと、
    Step1. 5秒何も起こらずに経過

    Step2. 文字を入力してくださいと聞かれる

    Step3. (使用者はここで文字を入力)
    となります。

    しかしsubprocessで動かすと、Step3の文字入力で何かを与えることができません。
    それなのでここで入力する方法を教えていただきたいです。
    分かりにくくて申し訳ありません。よろしくお願いします。

      補足日時:2023/07/27 15:28
  • 分かりにくくて申し訳ありません。補足を更に追加しましたので、是非ご回答お願いします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2023/07/27 15:29
  • 僕の為に多くの時間を割いて返信してくださり有難う御座います。
    何度も補足して申し訳ありませんが、
    subprocessで実行し、
    後からその実行したものに対しinputできる方法を教えてほしいです。
    input()が複数だったり、後からinputしたい場合にもできる方法ということでもありますね。
    つまり、こんな感じです↓


    import subprocess

    subprocess.run("process.py")

    inputに対し何かを入力する関数("ABCD")
    time.sleep(3)
    inputに対し何かを入力する関数("EFGH")


    最初のprocess.pyに、while文がついていると仮定すると分かりやすいかもしれません。
    ないですかね?
    何度も補足し、サンプルまで書いていただきましたが、申し訳ありません。
    重ねてお詫び申し上げます。

    No.3の回答に寄せられた補足コメントです。 補足日時:2023/07/27 16:25
  • すいません。なるべく目的を公開したくなかったのですが(パクられたくないのでね)
    分かりやすくするため目的を公開します。
    まず、Minecraftというゲームがありまして、
    そのゲームはマルチプレイが可能なのですが、マルチプレイを行うにあたってサーバーを建てる必要があるのです。サーバーはコマンドプロンプト上でソフトを起動すれば建てられます。
    それをsubprocessで起動をすると、確かに起動します。しかし、python側からそのサーバーに対しゲームの「コマンド」を送ることができないわけでございます。
    これがなんで問題かと言いますと、
    例えばTkinterでボタンを押したらコマンドを動かせるようにして利便性を上げようとした際に(このような運用を想定しているのですが、)できないわけなんですよ。
    だから教えてほしいなと思います。
    上から目線になって申し訳ありませんが、もう少々お付き合いください。

      補足日時:2023/07/28 11:10

A 回答 (6件)

プログラムを非同期に起動しておいて、


何らかのタイミングで発生するデータを発生の都度に送りたいと言うことですかね。

import subprocess
with subprocess.Popen(["プログラム","引数1","引数2"],stdin=subprocess.PIPE,text=True) as p:
 data = データを取得する処理()
 p.stdin.write(f"{data}\n")
 p.stdin.flush()
 data = データを取得する処理()
 p.stdin.write(f"{data}\n")
 p.stdin.flush()

こんな感じで、Popenとstdin.writeを使います。
    • good
    • 0

話がよく見えない。



subprocess.run(['python', 'process.py'])

を含んだプログラムを普通にコンソールから起動すれば
キーボードから input に入力できるけど、
どういう話ではない?
    • good
    • 0

複数行の文字列を渡す場合です。



in_text = """
ABCD
EFGH
IJKL
""".strip()

subprocess.run(”process.py",input=in_text,text=True)

1回目のinputでABCDが取得されます。
2回目のinputでEFGHが取得されます。
以下同様
    • good
    • 0

以下、サンプルです。



import subprocess
subprocess.run("python D:/goo/python/goo8/process.py",input="ABCD",text=True)

D:/goo/python/goo8/process.py は、こちらの環境でのパス名です。
あなたの環境にあわせて適切に設定してください。

input="ABCD",text=True
入力される文字列としてABCDを設定しています。
text=Trueは入力される値が文字列の場合、これを指定しておきます。
この回答への補足あり
    • good
    • 0

>数値やEnterを待つだけのものではありません。



ans = input("エンターキーを押してください。")
となっていた場合、
ansに画面から入力された文字列が返りますが、「この入力された文字列」をsubprocess関数で渡したいということですか?
この回答への補足あり
    • good
    • 0

どのような値をinput()に渡したいのでしょうか?

この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!