2017-04-22 7 views
0

私の質問:SPARCソルバー(現在端末にテキストとして表示されている)の出力をPythonコードの変数として保存する必要があります。これどうやってするの?pythonファイルへの入力としてSPARCソルバーの出力を使用するにはどうすればよいですか?

クイックメモ:SPARCは、ASP(answer-set-programming)ファイルに使用されるソルバーです。これは、人々が混乱しないように言い、asp.netを参照していると思います。

コマンドpython pythonfile.py | java -jar sparc.jar aspfile.spを使用して、同じ端末でPythonファイルとASPファイル(クエリモード)を同時に実行しています。 sys.stdout.write()という形式のpythonファイルからの出力は、SPARCソルバへの入力としてリダイレクトされています。つまり、私が出力したテキストは、私のASPコードを使用して解決されるクエリになります。これは動作していて、私が望む出力を生成していますが、私はその出力をPythonコードでどのように使用するのか分かりません。

これは私が尋ねた別の質問へのフォローアップで、見つけたhereです。その質問で私はC++コードからASPファイルを実行する方法を見つけようとしていました。私は答えにオプション2を使い、別のプロセスとして実行されている2つのファイルでリダイレクトされたstdoutを使用しています。元々の質問から1つ大きな変更がありました。私は現在、C++の代わりにPythonを使用しています。

さらに詳しい情報:私のPythonバージョンは2.7、私のオペレーティングシステムはUbuntu 14.04です。私はそれが関係しているとは思わないが、その場合は、私のPythonコードがGazebo Turtlebotシミュレーションを制御するためにも使用されていることを知っておくべきであり、そのシミュレーションを実行するのにROS Indigoを使用しています。誰かが要求しない限り、自分のコードをデバッグするのではなく、どの方法を使うことができるか(インターネット上で動作するものは見つけられません)というアイデアがほしいと思っています。しかし、コードを実行するときに端末に出力されるものの例を以下に掲載します。これは、私が 'キャプチャ'しようとしている情報であるためです。

SPARC V2.52 
program translated 
?- yes 
?- no 

Pythonファイルに変数として保存するのは「はい」と「いいえ」の回答です。

解決策:
同じことをしたいと思っている人のために、私はCaptainTrunkyによって提供された答えに従った。
まず、コマンドpython pythonfile.py | java -jar sparc.jar aspfile.sp > sparc.outを実行して、SPARC出力をテキストファイルsparc.outに保存します。
次に、テキストファイルの内容を表示するスクリプトを実行して、データを正しく操作していることを確認できるように、python outputParser.pyを実行します。スクリプトは非常に簡単です:

lines = [line.strip('?- ') for line in open('sparc.out')] 
lines = [line.strip('\n') for line in lines] 
print lines 
+0

メモ:あなたが生き残れそうなら通常のASP-Core-2ソルバーでは、clingo(SPARCはこのフードの下で使用されているようです)にはPython、C&C++インターフェイスIIRCがあります。個人的にはほとんど分かっていないROSについては、http://www.csがあります。uni-potsdam.de/rosoclingo/ – vukk

答えて

1

あなたは次のようなスクリプト(filter.py)とsys.stdinから読み取るのpythonを使用することができます。

import sys 
for line in sys.stdin.readlines(): 
    if line.startswith('?- '): 
    print line.strip() 

その後、あなたを呼び出しますこのようなパイプライン:

python pythonfile.py | java -jar sparc.jar aspfile.sp | python filter.py 
0

私はあなたのツールでそれを解析するために、テキストファイルにSPARK出力をダンプして行うことをお勧め。

はあなたのためにそれをしないシェルスクリプトを書く:

python pythonfile.py | java -jar sparc.jar aspfile.sp > spark.out 
python parse_out.py spark.out 
関連する問題