2016-06-15 8 views
2

私はexeファイルを呼び出し、パラメータ/入力データを入力します。python exeファイルをスクリプトで実行し、ユーザー名、パスワードなどを入力してください

cmd = dir_path + 'file.exe do something test' 
p = Popen(cmd, shell=True, stdout=PIPE, stderr=STDOUT) 

これはすでに正常に動作しています。 exeファイルを使ってこれを行う場合、あなたのユーザ名を入力する次のステップを実行するにはenterを押します。その後、パスワードなど。今私は私のスクリプトにこれを実装する方法を知らない、この手順はすべて私のスクリプトを完了している。基本的に私はどのようにPythonでのステップを実行するのか分からない。どんな助けでもThx。

UPDATE

今しようとした2つの方法(すべてのstackoverflowの上、この質問や他の人の中に言及しました)。

方法1>

p = subprocess.Popen(cmd, shell=False, stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE, universal_newlines=True) 
# cmd represents the path of the exe file 
p.stdin.write(username+"\n") 
p.stdin.write(password+"\n") 
p.sdin.close() 

方法2

p = subprocess.Popen(cmd, shell=False, stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE, universal_newlines=True) 

out,err = p.communicate("\n".join([username,password,"\n"])) 
# last \n should terminate the exe file and communicate should wait for the process to exit 

どちらかの方法を1行で同じ出力で私を提示:

ユーザー名:パスワード:

は通常、私はそれがあることを望んだ:

ユーザー名: "ユーザー名は、プロセス+ \で書いたn" は
パスワード: "パスワードはプロセス+ \で書いたn" は

アプリケーションがありますwindows7で実行している必要がありますし、exeファイルはコマンドライン内で実行されます。

だから、exeファイルがsubprocesssを通してそれを記述するので、そのことはできませんウェイ1ウェイ2をサポートしていないか、私は大きな間違いを犯していますことを多分可能です!

もう一度お返事ありがとうございます。

+0

「PyAutoIt」を検索 –

+0

は良く見えますが、私は働いているPCにソフトウェアやライブラリをインストールできません。サブプロセスやそれに類似するソリューションがありますか? – vicR

+0

どのようにして通常どのようにユーザー名、パスワードを入力しますか?それはGUIアプリケーションですか?注意:[アプリケーションは、標準入力/出力ストリームの外でコンソールに直接読み書きすることができます(http://stackoverflow.com/q/20980965/4279)。つまり、 'stdin = PIPE'は役に立たないかもしれません。あなたのOSは何ですか? Unixでは、 'pexpect'を使うことができます。なぜそうですか?(http://pexpect.readthedocs.org/en/stable/FAQ.html#whynotpipe)。 – jfs

答えて

3

あなたはほぼそこにいます!

は、次の操作を行うことができます。

import subprocess 
p = subprocess.Popen(cmd, stdin=subprocess.PIPE, shell=True) 
p.communicate(input='\r') 

あなたは問題がある場合は、\ n個の代わりに\ rの使用する必要があります。 \ rは改行で、\ nは改行です。

+0

hmm ok。通信が終了する「\ r」を送信することを意味します。しかし、私は "ターミナル"にとどまり、ちょうど "仮想"入力をしたい。 – vicR

+0

/rは、キャリッジリターン(Enterキー)をシミュレートする必要がありますが、/ nは改行になります。/nはあなたのために働くのですか? – AbrahamB

+0

ああ。だから、もし '\ r'の後に新しいcmdを追加したいのであれば、別のp.communicate(input = 'some cmd')をやるか、別のサブプロセスをPopenする必要がありますか? – vicR

関連する問題