¿Hay alguna forma de registrar la salida de stdout de un proceso determinado al usar la clase multiprocesamiento.Proceso en python?Salida de registro de multiprocesamiento.Proceso
Respuesta
La manera más fácil podría ser sobrescribir sys.stdout
. Modificando ligeramente un ejemplo de the multiprocessing manual:
from multiprocessing import Process
import os
import sys
def info(title):
print title
print 'module name:', __name__
print 'parent process:', os.getppid()
print 'process id:', os.getpid()
def f(name):
sys.stdout = open(str(os.getpid()) + ".out", "w")
info('function f')
print 'hello', name
if __name__ == '__main__':
p = Process(target=f, args=('bob',))
p.start()
q = Process(target=f, args=('fred',))
q.start()
p.join()
q.join()
y ejecutarlo:
$ ls m.py $ python m.py $ ls 27493.out 27494.out m.py $ cat 27493.out function f module name: __main__ parent process: 27492 process id: 27493 hello bob $ cat 27494.out function f module name: __main__ parent process: 27492 process id: 27494 hello fred
Puede configurar sys.stdout = Logger()
donde Logger
es una clase cuyo método write
(inmediatamente, o acumulando hasta que un \n
se detecta) llama logging.info
(o cualquier otra forma en que desea iniciar la sesión). An example of this in action.
No estoy seguro de lo que quiere decir con un proceso "dado" (¿quién lo dio, qué lo distingue de todos los demás ...?), Pero si quiere decir que sabe qué proceso desea destacar En el momento en que lo instancia, puede ajustar su función target
(y solo) - o el método run
que está anulando en una subclase Process
- en un contenedor que realiza esta "redirección" sys.stdout - y deja otros procesos solo.
¿Tal vez si esclavo las especificaciones un poco puedo ayudar con más detalle ...?
Sólo hay dos cosas que me gustaría añadir a la respuesta @ Marcos Rushakoff. Al depurar, lo encontré realmente útil para cambiar el parámetro buffering
de mis open()
llamadas a 0.
sys.stdout = open(str(os.getpid()) + ".out", "a", buffering=0)
De lo contrario, locura, porque cuando tail -f
ing el archivo de salida los resultados pueden ser muuuy intermitente. buffering=0
para tail -f
ing great.
Y para completar, hazte un favor y redirige sys.stderr
también.
sys.stderr = open(str(os.getpid()) + "_error.out", "a", buffering=0)
También, por conveniencia es posible volcar eso en una clase de proceso separado si así lo desea,
class MyProc(Process):
def run(self):
# Define the logging in run(), MyProc's entry function when it is .start()-ed
# p = MyProc()
# p.start()
self.initialize_logging()
print 'Now output is captured.'
# Now do stuff...
def initialize_logging(self):
sys.stdout = open(str(os.getpid()) + ".out", "a", buffering=0)
sys.stderr = open(str(os.getpid()) + "_error.out", "a", buffering=0)
print 'stdout initialized'
- 1. Archivo de registro de salida de registro de Git
- 2. Salida de registro de Git defectuosa
- 3. ¿Puedo obtener un valor de retorno de multiprocesamiento.Proceso?
- 4. Resultados de fuente MySQL de salida al archivo de registro
- 5. Desactivando la salida de la consola de registro de hibernación
- 6. Salida de registro duplicada al usar el módulo de registro de Python
- 7. Rails3 Salida de registro de SQL en un archivo separado
- 8. Cómo cambiar el color de la salida de registro log4j
- 9. ¿Salida de registro de Jersey a un archivo?
- 10. analizando la salida de registro de git, preferiblemente como xml
- 11. Registro de Java: ¿cómo redirigir la salida a un archivo de registro personalizado para un registrador?
- 12. PHP ejecutar comando y salida de registro sin esperar
- 13. mantener un registro de entrada/salida en I
- 14. enviar salida de registro a diferentes archivos en grillas 1.3.2
- 15. ¿Salió la salida de registro a XML, JSON o YAML?
- 16. Clasificar salida en el registro de Python MemoryHandler con SMTPHandler
- 17. ¿Alguien puede explicar esta salida de registro SVN?
- 18. java API de registro, deshabilitar el registro a la salida estándar
- 19. Registro de Python solo registro del script
- 20. Suprimir la salida del registro para NAnt Eliminar Tarea
- 21. VIM: almacenar la salida del comando externo en un registro
- 22. Interpretación de salida de salida
- 23. MSBuild.exe codificación de salida
- 24. ¿Cómo cambio la salida de la consola de registro java de std err a std out?
- 25. ¿Puedo escapar de los caracteres en la salida de registro de git?
- 26. Redirección de la salida estándar y de error que se agrega al mismo archivo de registro
- 27. Cómo aumentar la salida de la consola en la clase de registro de Android
- 28. cómo especificar el archivo de registro de errores y el archivo de salida en qsub
- 29. El formato de registro personalizado omite la nueva línea al final de la salida
- 30. Registro de entrada de NAudio WaveIn, y salida a NAudio WaveOut
Esto es simple y brillante. – Cerin