문제

따라서 Telnet 세션에 액세스해야합니다. 보다 구체적으로 JPL의 ephemeris 서비스. 명령 프롬프트에서해야 할 일을 정확히 알고 있지만 사용에 어려움이있었습니다. telnetlib 패키지.

명령 프롬프트를 통해 수행해야 할 단계는 다음과 같습니다.

telnet

o horizons.jpl.nasa.gov 6775

DES=C/2012 X1;

y

E

o

H06

y

2013-Nov-7 9:00

2013-Nov-17 9:00

1d

y

1,4,9,19,20,24

그런 다음 그 후 텍스트 파일에 저장하거나 단순히 변수로 유지 해야하는 큰 출력이 있습니다. 나중에 사용할 것입니다.

그리고 이러한 입력을 단계별로 다음과 같이 맺어야합니다.

어떤 충고?

도움이 되었습니까?

해결책

나는 사용할 것이다 telnetlib.Telnet.expect(), 이 같은:

import telnetlib

t = telnetlib.Telnet()
t.open('horizons.jpl.nasa.gov', 6775)

expect = ( ( r'Horizons>', 'DES=C/2012 X1\n' ),
           ( r'Continue.*:', 'y\n' ),
           ( r'Select.*E.phemeris.*:', 'E\n'),
           ( r'Observe.*:', 'o\n' ),
           ( r'Coordinate center.*:', 'H06\n' ),
           ( r'Confirm selected station.*>', 'y\n'),
           ( r'Accept default output.*:', 'y\n'),
           ( r'Starting *UT.* :', '2013-Nov-7 09:00\n' ),
           ( r'Ending *UT.* :', '2013-Nov-17 09:00\n' ),
           ( r'Output interval.*:', '1d\n' ),
           ( r'Select table quant.* :', '1,4,9,19,20,24\n' ),
           ( r'Scroll . Page: .*%', ' '),
           ( r'Select\.\.\. .A.gain.* :', 'X\n' )
)

with open('results.txt', 'w') as fp:
    while True:
        try:
            answer = t.expect(list(i[0] for i in expect), 10)
        except EOFError:
            break
        fp.write(answer[2])
        fp.flush()
        t.write(expect[answer[0]][1])

다른 팁

2013 년 4 월에서 5 월 사이에 일부 사람들은 실제로 JPL의 Horizons Telnet 인터페이스 주위에 전체 Python 패키지를 작성했습니다. 여기에서 찾을 수 있습니다.

https://pypi.python.org/pypi/horizonjpl

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top