SPARC ASP 솔버 인 Python2.7을 사용하고 있으며 Ubuntu14.04 명령에서 코드를 실행 중입니다. 선.Python2.7과 ASP 간의 양방향 통신 시도 : 작동하지 않는 텍스트 파일에 명명 된 파이프 내용 쓰기
파이썬 코드와 ASP (응답 설정 프로그래밍) 코드 사이에 양방향 통신을 설정하려고합니다. 이렇게하려면 파이썬에서 ASP로 쿼리를 보내고 ASP 응답을 FIFO 파이프에 넣고 파이썬 코드에서 FIFO의 내용을 문자열로 읽은 다음 문자열을 텍스트 파일에 씁니다. 텍스트 파일에서 내가 예상 한 결과를 얻고 있는지 확인할 수 있습니다.) 그러나 두 가지 문제가 발생합니다. 예상되는 응답의 일부만이 전체가 아니라 텍스트 파일에 표시됩니다. 파이썬 코드는 무한 루프에 있지만 루프는 한 번만 실행되는 것처럼 보입니다. 무슨 일 이니?
유감스럽게도 스택 오버플로에 대해 더 작은 질문을 던지고 있지만이 사이트의 유능한 사람들이 제공 한 유용한 답변에도 불구하고 여전히 아무 곳에도 없습니다. 문제는 어디에서 발생합니까? 거짓말. 그래서 나는 누군가가 나를이 문제를 해결할 수 있도록 도와 줄 수 있기를 희망하며 모든 코드를 게시 할 것이다.
내 파이썬 코드 :import sys
import os
while True:
# communicate with ASP code
try:
sys.stdout.write('moveForward(turtlebot)\n')
except KeyboardInterrupt:
sys.stdout.write('moveForward(turtlebot)\n')
sys.exit()
# read back the output of the ASP code - should be '?- yes'
try:
fifo = os.open('fifo', os.O_RDONLY)
string = os.read(fifo, 7)
os.close(fifo)
except KeyboardInterrupt:
fifo = os.open('fifo', os.O_RDONLY)
string = os.read(fifo, 7)
os.close(fifo)
sys.exit()
# write the latest output to the text file
try:
myfile = open("afile.txt", "w")
myfile.write(string)
myfile.close()
except KeyboardInterrupt:
myfile = open("afile.txt", "w")
myfile.write(string)
myfile.close()
sys.exit()
내 ASP 코드 :
내가 명령 줄에서 내 코드를 실행하는 방법sorts
#robot = {turtlebot}.
predicates
moveForward(#robot).
rules
moveForward(turtlebot).
:
mkfifo fifo
python test.py | java -jar sparc.jar aspfile.sp > fifo
무슨 일이 일어나고 무엇 :
후 내 코드를 실행하고 무엇이 있는지 보려면 afile.txt
을 확인하십시오. 엉 쓰기. 'yes'가 없으면 항상 단지 ?-
입니다. 또한 파이썬 코드가 한 번만 실행된다는 것을 알 수 있습니다. 쓰기 대신 텍스트 파일에 추가 할 때 코드를 실행할 때마다 한 줄만 추가되기 때문입니다. ASP 솔버 의 출력은이어야합니다. ?- yes
이어야합니다.
명령 줄에 > fifo
대신 > sparc.out
을 입력하면 (결과적으로 fifo를 먼저 통과하지 않고 출력을 텍스트 파일에 직접 입력 할 수 있기 때문에) 문제가 ASP 코드에있는 것으로 의심됩니다. 텍스트 파일 ?- yes
의 수십 번의 반복을 포함하는데, 이는 내가 기대하는 것입니다.
필자는 텍스트 파일에 대한 읽기/쓰기 작업이 너무 느려서 코드 작성을위한 응용 프로그램이 너무 느리기 때문에 (텍스트 파일에 출력을 쓰는 대신 FIFO를 사용하는 방법을 알아야합니다. turtlebot : 로봇에서 텍스트 파일 버전을 테스트했을 때 텍스트 파일에서 읽을 때마다 일시 중지 되었기 때문에 끊임없이 멈추고 시작되었습니다.
나는 모든 코드를 게시물에 버리고 '나를 위해 고쳐라!'라고 말하는 것이 좋지 않다는 것을 알고 있습니다.하지만 저는 현명합니다. 누군가가 양방향 의사 소통을 도와 줄 수 있다면 너무 감사 할 것입니다.