Question

NOTE: Ceci est pas la même question que Python :. variables shell persistants , comme subprocess cette question est en fait de variables d'environnement, pas les variables shell

Je suis en train d'automatiser une référence de base que je fais en utilisant le shell csh intégré commande 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 de subprocess.Popen (j'ai essayé en premier ...). Vous peut 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 il ne semble pas vraiment la bonne façon d'aller (et peut conduire à une construction de cmd assez horrible quand vous voulez modifier un tas de différents comportements shell).

Y at-il une autre façon de définir des variables shell dans subprocess autres que ce bidouille?

Était-ce utile?

La solution

Vous avez un nombre limité d'options pour communiquer à un processus enfant (arguments d'appel, l'environnement, et cours d'eau). Depuis la mise en une variable shell est dans un sens plus général de modifier l'état interne d'un processus enfant, ce que vous appelez un « bidouille » est en fait tout à fait raisonnable. Je ne connais pas toutes les variantes csh qui ont une manière particulière de charger des variables shell.

Cependant, vous pouvez neaten il par écrit toutes vos commandes d'initialisation à la coque par un tuyau ou en les écrivant même dans un fichier et les avoir lus par source csh de builtin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top