Pergunta

NOTA: Este é não a mesma pergunta que Python :. variáveis ??do shell persistentes em subprocess , como a questão é realmente sobre variáveis ??de ambiente, e não variáveis ??do shell

Eu estou tentando automatizar uma referência básica que eu estou fazendo no csh usando o shell built-in comando time. Você pode ajustar a saída do time definindo a variável de mesmo nome no shell como segue:

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

No entanto, este é, naturalmente, não uma variável de ambiente, para que você não pode passá-lo no parâmetro env no construtor subprocess.Popen (Tentei fazer isso em primeiro lugar ...). Você pode cortá-lo em conjunto por abusar (imo, de qualquer maneira) o argumento cmd para fazer isso, e depois o seu trabalho real (abreviado para exibir muito bem):

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

e que funciona como seria de esperar, mas não parece realmente o caminho certo para ir (e pode levar a alguma construção cmd muito horrível quando você quiser ajustar um monte de diferentes comportamentos shell).

Existe alguma outra maneira de variáveis ??do shell set em subprocess diferente desta kludge?

Foi útil?

Solução

Você tem um número limitado de opções para se comunicar com um processo filho (argumentos de invocação, meio ambiente e córregos). Desde definindo uma variável shell está em um sentido mais geral modificar o estado interno de um processo filho, o que você chama um "remendo" é na verdade bastante razoável. Eu não sei de quaisquer variantes csh que têm uma maneira especial de variáveis ??do shell de carga.

No entanto, você pode neaten-lo, gravando todos os seus comandos de inicialização para o shell através de um tubo, ou mesmo escrevê-las em um arquivo e tê-los lido por builtin source do CSH.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top