shell script armazenando tempo de execução com python

1

Estou tentando armazenar o tempo de execução de um programa python usando este

{ time python experiments.py --model iwae --k $k ; } 2> time$k.txt

quando faço isso em um script de shell, obtenho

40.35user 3.12system 0:43.00elapsed 101%CPU (0avgtext+0avgdata 850788maxresident)k
0inputs+30344outputs (0major+159448minor)pagefaults 0swaps

quando eu só executo uma linha, obtenho

real    0m16.367s
user    0m15.420s
sys 0m1.436s

que é o que eu quero.

Alguém pode me ajudar a registrar o tempo de execução do script python e armazenar o tempo de execução em um arquivo de texto, por favor?

script

# ! /bin/sh

for k in 3 5 10; do

echo $k

sudo ldconfig /usr/local/cuda/lib64

{ time python experiments.py --model iwae --k $k ; } 2> time$k.txt

done
    
por Wilfred Cho 19.04.2016 / 20:14

1 resposta

3

time é muitas coisas. Existe o /usr/bin/time programa GNU externo. Há a palavra-chave bash time .

$ type -a time
time is a shell keyword
time is /usr/bin/time

Quando você executa time … em um shell interativo, normalmente usa o bash e, portanto, a palavra-chave time entra em vigor.

Quando você executa time … em um script usando /bin/sh , o shell usado ( dash )  não tem time como palavra-chave, e o comando% time externo é chamado.

Para obter o resultado desejado, ligue para o time externo. comando com a opção -p :

-p, --portability
      Use the following format string, for conformance with POSIX
      standard 1003.2:
                real %e
                user %U
                sys %S

O comando externo também é mais amigável. Como não é uma palavra-chave, você não precisa fazer o truque wrap-in { … } -for-redirecionamento para obter a saída em um arquivo. Há uma opção para isso:

-o FILE, --output=FILE
      Write the resource use statistics to FILE instead of to the
      standard error stream.  By default, this overwrites the file,
      destroying the file's previous contents.  This option is useful
      for collecting information on interactive programs and programs
      that produce output on the standard error stream.

A saída também é muito mais personalizável, facilitando o processamento posterior. Com time do bash, as opções fornecidas em TIMEFORMAT são muito limitadas.

    
por muru 20.04.2016 / 14:33