examples example español python subprocess popen

example - subprocess python español



añadir subprocess.Popen la salida al archivo? (3)

¿Los datos en el archivo realmente se sobrescriben? En mi host Linux tengo el siguiente comportamiento: 1) la ejecución de su código en el directorio separado obtiene:

$ cat test test test.py test.py~ Hello

2) si agrego outfile.flush() después de outfile.write(''Hello'') , los resultados son ligeramente diferentes:

$ cat test Hello test test.py test.py~

Pero el archivo de salida tiene Hello en ambos casos. Sin el flush() explícito flush() búfer de stdout de llamada se vaciará cuando finalice el proceso de Python. ¿Dónde está el problema?

Puedo redireccionar con éxito mi salida a un archivo, sin embargo, esto parece sobrescribir los datos existentes del archivo:

import subprocess outfile = open(''test'',''w'') #same with "w" or "a" as opening mode outfile.write(''Hello'') subprocess.Popen(''ls'',stdout=outfile)

eliminará la línea ''Hello'' del archivo.

Supongo que una solución es almacenar el resultado en otro lugar como una cadena o algo (no será demasiado largo), y adjuntarlo manualmente con outfile.write(thestring) , pero me preguntaba si me falta algo en el módulo que Facilita esto.


Bueno, el problema es si desea que el encabezado sea el encabezado, entonces debe vaciarse antes de que el resto de la salida se escriba en el archivo: D


Seguro que puedes adjuntar la salida de subprocess.Popen a un archivo, y hago un uso diario de él. Así es como lo hago:

log = open(''some file.txt'', ''a'') # so that data written to it will be appended c = subprocess.Popen([''dir'', ''/p''], stdout=log, stderr=log, shell=True)

(por supuesto, este es un ejemplo ficticio, no estoy usando un subprocess para listar archivos ...)

Por cierto, otros objetos que se comportan como archivo (con el método write() en particular) podrían reemplazar este elemento de log , por lo que puede almacenar en búfer la salida y hacer lo que quiera con ella (escribir en archivo, mostrar, etc.) [pero esto Parece que no es tan fácil, mira mi comentario más abajo].

Nota: lo que puede ser engañoso, es el hecho de que el subprocess , por alguna razón que no entiendo, escribirá antes de lo que quiere escribir. Entonces, aquí está la manera de usar esto:

log = open(''some file.txt'', ''a'') log.write(''some text, as header of the file/n'') log.flush() # <-- here''s something not to forget! c = subprocess.Popen([''dir'', ''/p''], stdout=log, stderr=log, shell=True)

Así que la sugerencia es: ¡no se olvide de flush la salida!