Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Tincho.py en 6 Abril 2016, 17:41 pm



Título: Problema al importar script en Ubuntu
Publicado por: Tincho.py en 6 Abril 2016, 17:41 pm
Hola a todos. Trataré de describir lo más claramente posible el problema que tengo. Estoy adaptando un programa de consulta de stock que desarrollé en Windows con Python 2.7 y PyQt4 para que funcione con Ubuntu. El mismo posée una ventana principal con cuatro botones (consultar, ingresar nuevos artículos, modificar artículos y salir). En Windows quedó perfecto: uso el botón Consultar, por ejemplo, y se abre una nueva ventana con sus correspondientes funciones, SIN que se cierre la del menú principal. Si cierro la de consulta, puedo seguir usando la primera, hasta que la cierre. El problema es que en Ubuntu no puedo usar os.startfile, y al usar subprocess.call se abre la segunda ventana, puedo utilizarla perfectamente PERO la primera se bloquea (y hasta toma un tono más oscuro). Qué estoy haciendo mal?


Título: Re: Problema al importar script en Ubuntu
Publicado por: engel lex en 6 Abril 2016, 19:33 pm
probablemente se queda esperando a que la ventana termine... te recomiendo que la abras asincronamente es decir, no uses subprocess.call sino subprocess.Popen

Citar
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
Run the command described by args. Wait for command to complete, then return the returncode attribute.

Citar
class subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)
Execute a child program in a new process. On Unix, the class uses os.execvp()-like behavior to execute the child program. On Windows, the class uses the Windows CreateProcess() function. The arguments to Popen are as follows.

el uso basico es identico

Código:
subprocess.call(["ls", "-l"])
Código:
variableControlDelProceso = subprocess.Popen(["ls", "-l"])
si no vas a usar pipes ni nada de eso, puedes no declarar la variable

si usas la variables tienes las opciones de Popen (https://docs.python.org/2/library/subprocess.html#popen-objects) que te permiten ver si el programa finalizó o pasarle comandos