Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Como Responder A La Peticion De Un Comando De Consola?
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Como Responder A La Peticion De Un Comando De Consola? 
 
Hola soy nuevo en el foro y tengo poco conocimiento de programación en basic, al menos se jugar un poco con las propiedades de los objetos

bueno al grano, estoy haciendo una aplicación grafica para el driver xboxdrv (controlador para xbox 360).
Public Sub botonpad1_Click()

If botonpad1.Value = True Then
  botonpad1.Text = "Activado"
  Shell ("xboxdrv --wid 0 --silent --detach-kernel-driver --mimic-xpad")
Endif
If botonpad1.Value = False Then
  botonpad1.Text = "Desactivado"
  Shell (¿que comando uso para responder Crtl+c en el proceso anterior?)
Endif

End


como veran el comando es "xboxdrv --wid 0 --silent --detach-kernel-driver --mimic-xpad" y activa el driver para poder usar el control, pero este mismo al meterlo en consola al final dice "precione Ctrl+C" para terminar el proceso"

¿como hago para que ingresar ese Ctrl+C mediante un boton?, si cierro la aplicación el comando queda ejecutandose.
esta pregunta es parecida a por ejemplo si ejecuto el comando "apt-get upgrade", como hago para indicar el [S/n]? para proceder Si/No con la actualización.
 



 
obedlink - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Responder A La Peticion De Un Comando De Consola? 
 
obedlink escribió: [Ver mensaje]

Public Sub botonpad1_Click()

If botonpad1.Value = True Then
  botonpad1.Text = "Activado"
  Shell ("xboxdrv --wid 0 --silent --detach-kernel-driver --mimic-xpad")
Endif
If botonpad1.Value = False Then
  botonpad1.Text = "Desactivado"
  Shell (¿que comando uso para responder Crtl+c en el proceso anterior?)
Endif

End



Public Sub botonpad1_Click()

Dim oDriver as Process


If botonpad1.Value = True Then
  botonpad1.Text = "Activado"
  oDriver = Shell "xboxdrv --wid 0 --silent --detach-kernel-driver --mimic-xpad"
Endif
If botonpad1.Value = False Then
  botonpad1.Text = "Desactivado"
  oDriver.Kill()
Endif

End


Dime si te funciona!
 



 
última edición por sebikul el Lunes, 18 Marzo 2013, 19:11; editado 1 vez 
sebikul - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Responder A La Peticion De Un Comando De Consola? 
 
sebikul escribió: [Ver mensaje]
obedlink escribió: [Ver mensaje]

Public Sub botonpad1_Click()

If botonpad1.Value = True Then
  botonpad1.Text = "Activado"
  Shell ("xboxdrv --wid 0 --silent --detach-kernel-driver --mimic-xpad")
Endif
If botonpad1.Value = False Then
  botonpad1.Text = "Desactivado"
  Shell (¿que comando uso para responder Crtl+c en el proceso anterior?)
Endif

End



Public Sub botonpad1_Click()

Dim oDriver as Process


If botonpad1.Value = True Then
  botonpad1.Text = "Activado"
  oDriver = Shell "xboxdrv --wid 0 --silent --detach-kernel-driver --mimic-xpad"
Endif
If botonpad1.Value = False Then
  botonpad1.Text = "Desactivado"
  oDriver.Kill()
Endif

End


Dime si te funciona!


me da el error "objeto nulo"
 



 
obedlink - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Responder A La Peticion De Un Comando De Consola? 
 
obedlink escribió: [Ver mensaje]

me da el error "objeto nulo"


Public Sub botonpad1_Click()

Dim oDriver as Process

If botonpad1.Value = True Then
  botonpad1.Text = "Activado"
  oDriver = Shell "xboxdrv --wid 0 --silent --detach-kernel-driver --mimic-xpad"
Endif
If botonpad1.Value = False Then
  botonpad1.Text = "Desactivado"
  if oDriver then
oDriver.Kill()
oDriver=Null
endif
Endif

End


El código anterior era una "pista" para acercarte a la solución correcta. Lee la documentacion para saber bien como se manejan los procesos.
 



 
sebikul - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Responder A La Peticion De Un Comando De Consola? 
 
ok amigo

' gambas class file

Public oDriver As Process

Public Sub botonpad1_Click()

Dim clave As String

If botonpad1.Value = True Then
  clave = InputBox("ingrese su contraseña")
  botonpad1.Text = "Activado"
  oDriver = Shell ("echo " & clave & "|sudo -S xboxdrv --wid 0 --silent --detach-kernel-driver --mimic-xpad")
Endif

If botonpad1.Value = False Then
  botonpad1.Text = "Desactivado"
  oDriver.kill()
Endif

End


encontre la solucion parcial, hay que declarar la variables oDriver fuera del sub-proceso como ves en el codigo, si reemplazo el comando xboxdrv por dolphin para abrir el navegador de archivos dolphin, el comando .kill() si funciona pero con el comando xboxdrv no funciona, ni siquiera matando (Kill) el progreso en consola mediante "Editar--Enviar señal---matar la tarea" ni siquiera con "Terminar la tarea (TERM).
 



 
obedlink - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Responder A La Peticion De Un Comando De Consola? 
 
Hola, me parece que la razón por la que no podes matarlo es por que el programa fue ejecutado con sudo, y necesitas permisos de superusuario para matarlo

oDriver = Shell ("echo " & clave & "| sudo -S gedit")


Probá con este programa y no te va a funcionar matarlo

Creo que vas a tener que correr tu programa de gambas con permisos de superusuario, o lo otro que se me ocurre es que mates al proceso con otro shell:

Shell ("echo " & clave & "| sudo killall xboxdrv")


Pero eso requiere que pidas de nuevo la contraseña o que la guardes (no se si es un riesgo de seguridad), y también tenes que tener cuidado por que eso mata a otras instancias xboxdrv.

Respecto a enviar un atajo de teclado a un programa, existe en el ejemplo de reproductor de películas que viene con gambas una parte del código donde le enviá un "espacio" para pausar la reproducción del video con Print pero enviar algo como "ctrl c" nunca vi.

Saludos.
 



 
Enchufadoo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Responder A La Peticion De Un Comando De Consola? 
 
Enchufadoo escribió: [Ver mensaje]
Hola, me parece que la razón por la que no podes matarlo es por que el programa fue ejecutado con sudo, y necesitas permisos de superusuario para matarlo

oDriver = Shell ("echo " & clave & "| sudo -S gedit")


Probá con este programa y no te va a funcionar matarlo

Creo que vas a tener que correr tu programa de gambas con permisos de superusuario, o lo otro que se me ocurre es que mates al proceso con otro shell:

Shell ("echo " & clave & "| sudo killall xboxdrv")


Pero eso requiere que pidas de nuevo la contraseña o que la guardes (no se si es un riesgo de seguridad), y también tenes que tener cuidado por que eso mata a otras instancias xboxdrv.

Respecto a enviar un atajo de teclado a un programa, existe en el ejemplo de reproductor de películas que viene con gambas una parte del código donde le enviá un "espacio" para pausar la reproducción del video con Print pero enviar algo como "ctrl c" nunca vi.

Saludos.


En primer lugar, debería funcionar .Kill() sin sudo ya que el proceso padre (gambas) lo esta matando, no una aplicación del espacio del usuario (como kill o un administrador de tareas). Por otro lado, no deberías usar killall. Con Process.Handle puedes saber el pid del proceso y ejecutar:

Exec["kill", "-9", oDriver.Handle]
 

* Depende de como ejecutaste el proceso en un principio si debes incluir sudo o no.

Finalmente, según la documentación de xboxdrv debería funcionar en el espacio de usuario, por lo tanto sudo no debería ser requerido. Si podría pasar que por algún tema de configuración (udev mas que nada) solo root este autorizado a acceder al dispositivo, pero esto depende del sistema.

Con respecto al Ctrl + C, no se trata de enviar algún dato al proceso sino enviarle una señal. (Hay mucha info de esto en Internet)
 



 
sebikul - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Responder A La Peticion De Un Comando De Consola? 
 
gracias por la ayuda, me puse a invertigar lo del comando kill+id del proceso y funciona perfectamente, el killall no me sirve porque como dices mata todos los procesos y yo pienso usar hasta 4 procesos iguales a la vez, pero tengo que decirte que si hay que hacerlo con root. por ejemplo:
si en una konsola ejecuto "sudo xboxdrv" para terminarlo el comando kill + el id tengo que meterlo con sudo tambien.

ahora el problema es que no puede hacerlo en gambas

con este codigo
Shell "echo " & clave & "|sudo -S kill" & oDriver.Handle

me da este error: sudo: kill14862: orden no encontrada

obiamente falta un espacio entre kill y el numero para quedar asi "kill 14862" pero al darle el espacio de esta forma:
Shell "echo " & clave & "|sudo -S kill " & oDriver.Handle

el comando no hace nada ni devuelve ningun error.
 



 
obedlink - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Responder A La Peticion De Un Comando De Consola? 
 
Debes usar

Shell "echo -n " & ...

No da error porque la contraseña para sudo es incorrecta, con -n evitas que echo añada un final de linea.
 



 
sebikul - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Comando PV: Mostrar Información De Como V... jsbsan Shell Scripting 1 Sabado, 06 Julio 2013, 16:44 Ver último mensaje
shordi
No hay nuevos mensajes Línea De Comando En La Ventana De Consola... Shell General 4 Miercoles, 02 Abril 2014, 10:35 Ver último mensaje
Shell
No hay nuevos mensajes Como Crear Un Programa De Consola O Comand... v3ctor General 1 Lunes, 19 May 2014, 08:09 Ver último mensaje
Shell
El tema está bloqueado: no pueden editarse ni agregar mensajes. Responder o Responder Citando en el Foro jguardon Sobre Gambas-es 1 Domingo, 24 May 2020, 21:17 Ver último mensaje
jguardon
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron