O Scilab tem uma interface gráfica que facilita muito o uso interativo do software. Entretanto, as vezes é desejável a execução de um sistema sem interface gráfica. Por exemplo, quando se deseja realizar a execução de várias simulações simultaneamente e de longa duração não é conveniente ficar com um monte de telas gráficas abertas no computador. Além disso, quando o programa está rodando em algum ambiente remoto, como um servidor ou um cluster de microcomputadores, o acesso mais conveniente é via terminal (Ex: SSH). Assim, para atender a estes casos específicos o Scilab pode ser executado em modo batch (não interativo) ou em modo interativo, mas sem interface gráfica e utilizando apenas um terminal.
Modos console e terminal
Para execução interativa em modo texto o Scilab tem dois modos: console e terminal. Os dois funcionam em modo texto. Entretanto, no modo console, apesar do Scilab estar em modo texto, ele pode abrir janelas gráficas quando necessário. Por exemplo, no modo console é possível abrir a janela de help e mandar plotar gráficos em janelas separadas. Esse é um modo interessante de execução quando o Scilab está sendo executado remotamente via ssh com a opção “-X”. E oferece um meio termo entre uma execução em ambiente completamente gráfico e não gráfico. Para utilizar o modo console, basta abrir o terminal do computador e digitar: “scilab -nw” . Abaixo segue um vídeo ilustrativo.
Reparem no vídeo acima que o comando “plot” do Scilab é executado normalmente e uma janela gráfica com o plot solicitado é aberta logo após a execução do comando.
No modo interativo de terminal, o Scilab é executado apenas em modo texto e qualquer comando que exija uma interface gráfica, como um plot, não é executado. O programa fica mais leve também e ocupa menos espaço na memória do computador. Para executar o Scilab em modo de terminal, basta abrir o terminal do computador e digitar: “scilab -nwni” . Abaixo segue um pequeno vídeo ilustrativo.
Notem que ao contrário do exemplo de execução em modo console(opção “-nw”), no modo terminal(opção “-nwni”), o comando “plot” não é executado.
Modo batch ou não interativo
No modo batch o Scilab é chamado via linha de comando para executar um script específico e interrompe a sua execução após o fim da execução do script. Este é o modo recomendado caso se deseje utilizar o Scilab em um ambiente de cluster, permitindo a execução simultânea de várias instâncias diferentes do Scilab. Para executar no modo batch é preciso executar o seguinte comando de linha:
scilab -nwni -quit -f <nome do script>
Notem que, na realidade, não há “um” modo batch no Scilab. O que há é uma combinação de parâmetros de execução que permite o Scilab funcionar em um modo batch. O primeiro parâmetro passado para o scilab é exatamente o modo de funcionamento sem interface gráfica. Pode ser “-nwni”, que é mais rápida e não serve para fazer chamadas gráficas(como plotagens) ou “-nw” que pode ser utilizado para exibir gráficos e plots. O segundo parâmetro, “-quit”, diz ao Scilab para finalizar a sua execução juntamente com o script passado através do parâmetro “-f” . O último parâmetro, “-f”, é seguido pelo nome do arquivo script do Scilab que se deseja executar.
Os scripts para processamento em modo batch em geral podem ser divididos em três partes principais:
- Inicialização e leitura dos dados a serem processados.
- Processamento
- Finalização e gravação dos dados processados
É importante em scripts desse tipo que informações de data e hora do processamento também sejam salvas juntamente com as informações processadas. Abaixo, segue um exemplo de template para um script Scilab para execução em modo batch.
//Nome do arquivo a ser processado
dataInFile="dados.csv"
//Descrição do processamento
DESC="Este é um arquivo de template para processamento em modo batch."
startTime=getdate()
timeStamp=msprintf("%d%02d%02d_%02dh%02dm%02ds%03d\n", startTime(1), startTime(2), startTime(6:8), startTime(9),startTime(10));
logFile="log"+timeStamp+".txt"
dataOutFile="dataOut"+timeStamp+".csv"
printf("************************************************** \n")
printf(" Exemplo de execução em modo batch\n")
printf("************************************************** \n")
printf(" TimeStamp: %s \n",timeStamp)
printf(" Arquivo de log: %s \n",logFile)
printf("Arquivo de entrada de dados: %s \n",dataInFile)
printf(" Arquivo de saída de dados: %s \n",dataOutFile)
printf("************************************************** \n")
//O arquivo log é para gravar informações textuais e de eventos que ocorreram durante
//o processamento de dados.
fdLog = mopen(logFile,'wt');
mfprintf(fdLog,'Data execução: %d %02d %02d\n',startTime(1),startTime(2),startTime(6));
mfprintf(fdLog,'Hora execução: %d:%02d:%02d\n',startTime(7:9));
mfprintf(fdLog,'Arquivo processado: %s\n',dataInFile);
//Leitura do arquivo de entrada
mIn=csvRead(dataInFile,";",".")
[M,N]=size(mIn)
mfprintf(fdLog,'Número de linhas: %d\n',M);
mfprintf(fdLog,'Número de colunas: %d\n',N);
mfprintf(fdLog,'Arquivo de saída: %s\n',dataOutFile);
tic() //Contagem do tempo de execução
//Início do processamento (qualquer processamento que você quiser)
mm=mean(mIn,'r') //Ex média por linha de mIn
md=stdev(mIn,'r')//Ex desvio por linha de mIn
mx=max(mIn,'r') //Ex máximo por linha de mIn
mn=min(mIn,'r') //Ex mínimo por linha de mIn
me=median(mIn,'r')//Ex mediana por linha de mIn
mOut=[mm;md;mx;mn;me] //Concatena todos os resultados em uma única matriz
//Fim do processamento
dt=toc() //Fim do contagem do tempo de execução
//Grava os resultados
csvWrite(mOut,dataOutFile,";",".","%.2f")
mfprintf(fdLog,'Tempo de processamento(s): %f\n',dt);
mclose(fdLog);
O script acima lê os dados que devem ser processados de uma planilha chamada “dados.csv”. Cria um “timeStamp”, que não é nada além de uma rotulação que indica o momento de execução do script. Faz o processamento desejado (linhas 43 à 49 do script) com os dados lidos da planilha e grava informações sobre o processamento em dois arquivos distintos. Um arquivo de log e uma planilha .csv. Executando o script acima teremos o seguinte resultado:
Além da saída impressa na tela, temos a criação dos arquivos de log, para gravar informações gerais sobre a execução do processo e outro .csv para gravar os dados processados. Tanto o arquivo de log quanto o arquivo .csv são gravados com um rótulo de tempo. Isso é um procedimento conveniente para não ter que ficar se preocupando em renomear o nome dos arquivos de saída. Com o rótulo de tempo, a cada momento que o script for executado vai gerar arquivos de saída com terminações diferentes e isso ainda facilita na hora de organizar os arquivos de resultados por ordem cronológica.
Deixe um comentário