Pergunta

Estou aprendendo a escrever um TCL (espera) scripts e eu aviso que alguns exemplos mostram a utilização de desova, enquanto outros mostram o exec comando. Eu tentei googling, mas não consegue encontrar o que é a diferença?

Suponha que eu chamo de 'exec' em um meio de um roteiro de longa espera, o que posso esperar que aconteça?

Foi útil?

Solução

spawn é um comando expect não um comando tcl. exec é um comando tcl.

spawn cria um processo. entrada e saída dos processos estão conectados a esperar para uso pela outra esperar comandos:. send, expect e interact

exec cria um subprocesso sob TCL. Em geral, o TCL é suspenso até que as concluída subprocesso. No entanto, um pode criar o sub-processo em segundo plano (usando & como o último argumento) e no caso de ganchos até a entrada e saída corretamente, TCL pode interagir com o subprocesso. Isto é muito desajeitado e é exatamente o tipo de interação que esperava era projetado para lidar com problemas.

Outras dicas

A maneira mais simples de responder à pergunta é reformular-lo para perguntar quando você deve usar exec vs desova. Em suma, o uso de desova para comandos interativos e exec para comandos não-interativas.

É importante notar também que alguns (muitos?) Programas se comportam de forma diferente quando executado por um usuário (ou seja, na linha de comando) vs fazer parte de um processo em lote / executado a partir de outro processo. A diferença real é se há um terminal anexado ao processo.

O comando spawn, parte da extensão Espere Tcl, conjuntos as coisas de modo que o programa executado se vê como executado por um usuário, e em seguida, adiciona funcionalidade para permitir que o programa tcl para interagir com o programa externo de uma forma conveniente ( ou seja, combinando-o de saída através de expressões regulares e ramo de fora aqueles jogos). As coisas funcionem via semente são executadas de forma assíncrona.

O comando exec é um comando núcleo Tcl que é executado o outro programa, devolvendo-o de saída. Ele não faz qualquer um a configuração complicada que desova faz, mas pode ser muito útil para apenas executando um programa e vê-lo de saída (e do código de retorno). As coisas funcionam por exec são, por padrão, são executados de forma síncrona, mas um e comercial no final do comando faz com que ele seja executado em segundo plano (muito parecido com shell script tradicional).

O comando aberto, embora geralmente usado para ler / escrever ficheiros, também pode ser usado para executar processos externos. Precedendo o nome do comando com o pipe (|) símbolo, você diga a ele para executar um processo externo, e ter acesso a ler / descritores de arquivos de gravação para interagir com o processo resultante. Esta é uma espécie de meio termo entre exec e desovar, com muito mais interação com o processo disponível, mas sem a configuração do ambiente complicado que desova faz. Pode ser extremamente útil para interagir com programas que exigem entrada, mas ainda são razoavelmente bem configuração para automação.

Tanto quanto eu sei, retornos gerar um ID de processo (e ligações com Esperar), enquanto exec retorna apenas o stdout final, a menos que você passar "&". Por isso não vai afectar os seus espera.

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