NOTE: Ceci est pas la même question que Python: Persistent shell variables in subprocess, comme cette question est en fait sur les variables d'environnement, pas de variables shell.Comment définir les variables shell dans subprocess.Popen (d'une manière moins laide ...)
Je suis en train d'automatiser une référence de base que je fais en utilisant le shell csh commande intégrée time
. Vous pouvez modifier la sortie de time
en définissant la variable du même nom dans la coquille comme suit:
set time=(1000000000 "%U %S %E %P %W %X %D %K %M %F %R %I %O %r %s %k %w %c")
Cependant, cela est bien sûr pas une variable d'environnement, de sorte que vous ne pouvez pas passer dans le paramètre env
dans le constructeur subprocess.Popen
(j'ai essayé ça en premier ...). Vous pouvez pirater ensemble en abusant (imo, de toute façon) l'argument cmd
de le faire, et puis votre travail réel (raccourci pour afficher bien):
time_cmd = 'set time=(1000000000 "%U %S %E %P %c"); time ./some_func'
p = subprocess.Popen(cmd, executable="/bin/csh", shell=True, ...)
et qui fonctionne comme on peut s'y attendre, mais semble pas vraiment la bonne voie à suivre (et peut conduire à une construction horrible cmd
lorsque vous voulez modifier un tas de différents comportements de shell).
Y at-il une autre façon de définir des variables shell dans subprocess
autre que cette bidouille?
C'est probablement un bon moyen de le regarder (malheureusement). Alors que la plupart des shells semblent avoir des variables shell, leur comportement n'est certainement pas gouverné par POSIX comme le sont les variables d'environnement. Malheureusement, je n'ai pas trouvé la bonne sauce magique pour communiquer avec un véritable * shell * via un tuyau. Cela ressemble plus à un travail pour pyexpect ou personnalisé tty munging, qui sont moins attrayants que ma solution existante. :-) –