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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top