Domanda

Nota: Questo è non la stessa domanda Python :. variabili di shell persistenti in sottoprocesso , come quella domanda è in realtà sulle variabili di ambiente, non shell variabili

Sto cercando di automatizzare un punto di riferimento di base che io sto facendo in csh utilizzando la shell comando integrato time. È possibile modificare l'output di time impostando la variabile con lo stesso nome nella shell come segue:

set time=(1000000000 "%U %S %E %P %W %X %D %K %M %F %R %I %O %r %s %k %w %c")

Tuttavia, questo non è ovviamente una variabile di ambiente, quindi non si può passare nel parametro env nel costruttore subprocess.Popen (ho provato prima ...). possono incidere insieme abusando (IMO, comunque) l'argomento cmd per farlo, e poi il vostro lavoro effettivo (ridotto a visualizzare bene):

time_cmd = 'set time=(1000000000 "%U %S %E %P %c"); time ./some_func'
p = subprocess.Popen(cmd, executable="/bin/csh", shell=True, ...)

e che funziona come ci si aspetterebbe, ma non sembra davvero la strada giusta da percorrere (e può portare a qualche costruzione cmd abbastanza orribile quando si desidera modificare una serie di comportamenti diversi di shell).

C'è un altro modo per impostare variabili di shell in subprocess diversi dal presente ripiego?

È stato utile?

Soluzione

Si dispone di un numero limitato di opzioni per comunicare con un processo figlio (argomenti invocazione, l'ambiente, e corsi d'acqua). Dal momento che l'impostazione di una variabile scocca è in un senso più generale modificando lo stato interno di un processo figlio, quello che si chiama un "ripiego" è in realtà abbastanza ragionevole. Non so di eventuali varianti CSH che hanno un modo speciale per caricare le variabili di shell.

Tuttavia, si potrebbe neaten in su, scrivendo tutti i comandi di inizializzazione alla shell tramite un tubo, o anche la scrittura in un file e averli letti da incorporato source di csh.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top