2017-04-22 6 views
0

질문 : SPARC 솔버 (현재 터미널에 텍스트로 표시됨)의 출력을 Python 코드의 변수로 저장해야합니다. 어떻게해야합니까?어떻게 SPARC 솔버의 출력을 파이썬 파일의 입력으로 사용합니까?

빠른 참고 : SPARC는 ASP (answer-set-programming) 파일에 사용되는 솔버입니다. 사람들이 혼란스럽지 않고 asp.net을 참조한다고 생각하면됩니다.

python pythonfile.py | java -jar sparc.jar aspfile.sp 명령을 사용하여 동일한 터미널에서 Python 파일과 ASP 파일 (쿼리 모드에서)을 동시에 실행하고 있습니다. sys.stdout.write() 형태의 파이썬 파일 출력은 SPARC 솔버의 입력으로 재 지정됩니다. 즉, 내가 출력 한 텍스트가 내 ASP 코드를 사용하여 해결 된 쿼리가됩니다. 이 작업하고, 원하는 출력을 생성하지만 내 파이썬 코드에서 해당 출력을 사용하는 방법을 알아낼 수 없습니다.

이것은 내가 묻는 또 다른 질문 인 후속 조치로, here입니다. 그 질문에서 나는 C++ 코드에서 ASP 파일을 실행하는 방법을 찾으려고 노력했다. 나는 주어진 옵션 2와 함께 갔고 두 파일이 별도의 프로세스로 실행되는 방향 전환 된 표준 출력을 사용하고있다. 원래 질문 이후 한 가지 큰 변화가 있음을 기억하십시오. 이제 C++ 대신 Python을 사용하고 있습니다.

세부 정보 : 필자의 Python 버전은 2.7이고 운영 체제는 Ubuntu 14.04입니다. 관련성이 있다고는 생각하지 않지만 그럴 경우 Python 코드가 Gazebo Turtlebot 시뮬레이션을 제어하는 ​​데 사용되고 있는지 알아야합니다. 그리고 ROS Indigo를 사용하여 시뮬레이션을 실행하고 있습니다. 누군가가 요구하지 않는 한 내 코드를 게시하지 않을 것입니다. 단지 코드를 디버깅하거나 도움을 필요로하지 않고 (인터넷에서 작동하는 것을 찾을 수없는) 사용할 수있는 방법에 대한 아이디어를 원합니다. 그러나 아래 코드는 내 코드가 실행될 때 터미널에 출력되는 내용의 예입니다.이 정보는 '캡처'하려는 정보입니다.

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

내 파이썬 파일에 변수로 저장하려는 대답은 '예'이고 '아니오'입니다.

해결 방법 :
동일한 일을하기를 원하는 사람은 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에서 읽을 파이썬을 사용할 수 있습니다 : 다음 호출

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