Estoy tratando de llamar a la función reboot
desde libc en Python a través de ctypes
y simplemente no puedo hacer que funcione. He estado haciendo referencia a la página man 2 reboot
(http://linux.die.net/man/2/reboot). Mi versión del kernel es 2.6.35.Python ctypes llamando al reinicio() desde libc en Linux
A continuación se muestra el registro de la consola desde el aviso interactivo de Python donde intento que mi máquina se reinicie. ¿Qué estoy haciendo mal?
¿Por qué no está trabajando ctypes.get_errno()
?
>>> from ctypes import CDLL, get_errno
>>> libc = CDLL('libc.so.6')
>>> libc.reboot(0xfee1dead, 537993216, 0x1234567, 0)
-1
>>> get_errno()
0
>>> libc.reboot(0xfee1dead, 537993216, 0x1234567)
-1
>>> get_errno()
0
>>> from ctypes import c_uint32
>>> libc.reboot(c_uint32(0xfee1dead), c_uint32(672274793), c_uint32(0x1234567), c_uint32(0))
-1
>>> get_errno()
0
>>> libc.reboot(c_uint32(0xfee1dead), c_uint32(672274793), c_uint32(0x1234567))
-1
>>> get_errno()
0
>>>
Editar:
Via Nemos Recordatorio- puedo conseguir get_errno
para regresar 22 (argumento no válido). No es una sorpresa ¿Cómo debo llamar al reboot()
? Claramente, no estoy transmitiendo argumentos que la función espera. =)
¿Está en el directorio raíz al ejecutar este script? –
acceso denegado? No sé ... intente (re) leer esto: http://linux.die.net/man/2/reboot – Manux
Incluso si se denegó el acceso, uno esperaría que 'errno' informara' EPERM'. – sarnold