2012-01-04 1 views
2

私はプログラムにファイルを渡す代わりに、プログラムが必要とする情報を持つpython変数をファイルに渡すのではなく、Python変数を使用してファイルを渡す方法を模倣する方法

私は模倣する必要がある構文:

msfconsole < setofcommands.txt 2>/dev/null 

私は何をしたいと思います:誰かが上msfconsoleのようなものと対話する方法を知っていた場合、私はまた、非常に幸せになる

answer = os.system('msfconsole < ' + myvariable + ' 2>/dev/null') 

msfconsoleシェルが開いているときに、一連のコマンドを入力するたびに新しいアプリケーションを再起動することなく、別のコマンドを入力するためにPythonを継続的に取得できるようにします。

ありがとうございます。

+3

http://docs.python.org/library/subprocess.html –

+0

このスレッドを確認してください。https://stackoverflow.com/questions/8720838/how-to-mimic-passing-a-file- using-python-variable/8720889#8720889 –

答えて

3

代わりに、os.system、あなたはsubprocessを使用する必要があります終了までブロックします通信

import subprocess 
p=subprocess.Popen(['msfconsole'], stdin=subprocess.PIPE, stderr=subprocess.PIPE) 
p.communicate(myvariable) 

注意を。一般的に、stdin/stdout経由の別のプロセスとの対話的な通信は、他のプロセスがメッセージの終わりをどのように区切っているかを知る必要があるため、難しい問題です。

メタソリューションの場合は、対話型ツールmsfconsoleの代わりにXMLRPC APIを使用する必要があります。

+0

私が渡すファイルは次の構文になっています:db_driver mysql \ n db_connect *:* @ localhost ok。私は変数と同じ構文を使用しますか?変数が事前定義されている場合、新しいコマンドを追加してオープンシェルと対話する方法は、新しいコマンドを変数に追加することができます。 –

+0

これはmsfconsoleに組み込まれているnessusプラグインを使用するためのものです –

+0

既に開いているファイルにデータが保存されている場合は、ファイルハンドルを 'stdin ='として渡してください。しかし、ファイルを渡すのと同じ効果を得たいと仮定した場合、変数の内容は実際にはファイルの内容でなければなりません。もちろん、コンテンツをあらかじめ変更しておくと、変更内容が反映されます。しかし、msfconsoleはNessusをスクリプトする正しい方法でもありません。 [pynessus](http://code.google.com/p/pynessus/)を試しましたか? – phihag

関連する問題