Gostaria de usar o execSync
método que foi adicionado no NodeJS 0.12, mas ainda tenho a saída na janela do console a partir da qual executei o script Node.
Por exemplo, se eu executar um script NodeJS com a seguinte linha, gostaria de ver a saída completa do comando rsync "ao vivo" dentro do console:
require('child_process').execSync('rsync -avAXz --info=progress2 "/src" "/dest"');
Eu entendo que execSync
retorna a saída do comando e que eu poderia imprimi-lo no console após a execução, mas desta forma não tenho saída "ao vivo" ...
node.js
child-process
suamikim
fonte
fonte
[0,1,2]
eu ter usado'inherit'
, o que é equivalente a[process.stdin, process.stdout, process.stderr]
ou[0,1,2]
conforme os documentosoptions.stdio
a documentação: nodejs.org/api/child_process.html#child_process_options_stdio{stdio:'inherit'}
, você precisa adicionar .toString () e chamar console.log manualmente com o resultado. Além disso, ele nem preenche o requisito de perguntas de ver o resultado do comando "ativo". Não acho que seja "muito mais simples", na verdade, não acho que seja mais simples.Você pode simplesmente usar
.toString()
.Isso foi testado no Node
v8.5.0
, não tenho certeza sobre as versões anteriores. De acordo com @etov , ele não funcionav6.3.1
- não tenho certeza sobre isso.fonte
.execSync()
lança umaError
instância.A menos que você redirecione stdout e stderr como a resposta aceita sugere, isso não é possível com execSync ou spawnSync. Sem redirecionar stdout e stderr, esses comandos retornam apenas stdout e stderr quando o comando é concluído.
Para fazer isso sem redirecionar stdout e stderr, você precisará usar spawn para fazer isso, mas é bem direto:
Eu usei um comando ls que lista recursivamente os arquivos para que você possa testá-lo rapidamente. Spawn usa como primeiro argumento o nome do executável que você está tentando executar e, como segundo argumento, usa uma matriz de seqüências de caracteres representando cada parâmetro que você deseja passar para esse executável.
No entanto, se você estiver usando o execSync e não puder redirecionar stdout ou stderr por algum motivo, poderá abrir outro terminal como o xterm e passar um comando da seguinte maneira:
Isso permitirá que você veja o que seu comando está fazendo no novo terminal, mas ainda tem a chamada síncrona.
fonte