질문 : 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
메모 : 당신이 살아남을 수 있다면 일반 ASP-Core-2 솔버 인 clingo (SPARC는 아래에서 사용하는 것 같습니다)에는 Python, C & C++ 인터페이스 IIRC가 있습니다. 개인적으로는 거의 알지 못하는 ROS에는 http : //www.cs가 있습니다.uni-potsdam.de/rosoclingo/ – vukk