Pregunta

Así que necesito acceder a una sesión de Telnet. Más específicamente el servicio Ephemeris de JPL. Sé exactamente lo que necesito hacer en el símbolo del sistema, pero he tenido problemas para usar el telnetlib paquete.

Estos son los pasos que necesito dar a través del símbolo del sistema:

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

Y luego, después de eso, hay una gran salida que necesito guardar en un archivo de texto, o simplemente mantenerme como una variable. Lo usaré más tarde.

Y seguir estas entradas paso a paso debería llevarlo a la información exacta que necesito obtener

¿Algún consejo?

¿Fue útil?

Solución

yo usaría telnetlib.Telnet.expect(), algo como esto:

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])

Otros consejos

Entre abril y mayo de 2013, algunas personas realmente escribieron un paquete de Python completo alrededor de la interfaz Telnet Horizons de JPL. Se puede encontrar aquí:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top