Cómo establecer las variables de shell en subprocess.Popen (de una manera menos feo ...)
-
12-09-2019 - |
Pregunta
NOTA: Este es no la misma pregunta que Python :. variables de shell persistentes en el subproceso , en que dicha cuestión es realmente acerca de las variables de entorno, no las variables de shell
Estoy tratando de automatizar un punto de referencia básico que estoy haciendo en CSH usando la cáscara comando integrado time
. Se pueden ajustar la salida de time
estableciendo la variable del mismo nombre en la cáscara como sigue:
set time=(1000000000 "%U %S %E %P %W %X %D %K %M %F %R %I %O %r %s %k %w %c")
Sin embargo, este supuesto no es una variable de entorno, por lo que no se puede pasar en el parámetro en el constructor env
subprocess.Popen
(probé el primer ...). Usted puede entrar ilegalmente en él junto al abusar (OMI, de todos modos) el argumento cmd
a hacer eso, y entonces su trabajo real (acortado a mostrar muy bien):
time_cmd = 'set time=(1000000000 "%U %S %E %P %c"); time ./some_func'
p = subprocess.Popen(cmd, executable="/bin/csh", shell=True, ...)
y que funciona como era de esperar, pero no parece realmente el camino correcto a seguir (y puede conducir a alguna construcción cmd
bastante horrible cuando se quiere modificar un montón de diferentes comportamientos de concha).
¿Hay alguna otra manera de establecer las variables de shell en subprocess
distintos del presente kludge?
Solución
Usted tiene un número limitado de opciones para comunicarse con un proceso hijo (argumentos de invocación, medio ambiente y corrientes). Desde el establecimiento de una variable de shell es en un sentido más general modificando el estado interno de un proceso hijo, lo que se llama una "chapuza" es en realidad bastante razonable. No sé de ningún variantes CSH que tienen una forma especial para cargar las variables de shell.
Sin embargo, usted podría sobrehilarlos que por escrito todos los comandos de inicialización a la carcasa a través de una tubería, o incluso escribir en un archivo y para que estén leídos por orden interna source
de CSH.