Muszę uruchomić jakieś interaktywne polecenie powłoki wewnątrz node.js. Pozwala nasza interaktywna powłoka być $ python
:Jak uruchomić interaktywną komendę powłoki wewnątrz pliku node.js?
var cp = require('child_process');
var pythonChildProcess = cp.spawn('python');
pythonChildProcess.stdout.on("data", function(data) {
console.log('data successfully written!', data); // never outputs anything
});
pythonChildProcess.stdin.write('1 + 1');
pythonChildProcess.stdin.end();
Kod ten nie emituje nic (ale powinny być 2
stdout).
Ale jeśli tak, pojawi się inny problem: jak uczynić go interaktywnym? Proces kończy się, gdy zadzwonię pod numer pythonChildProcess.stdin.end();
! Ale po prostu chciałem zakończyć stdin i napisać dalej stdin!
UPD: Gdybym mógł emulować naciśnięcie przycisku enter
- byłbym w stanie interaktywnie napisać do procesu. Ale dodanie \n
na końcu wejściowego łańcucha nie pomoże.
"do końca standardowego wejścia stdin i napisać następny"? Czy możesz wyjaśnić, co masz na myśli? –
@ E_net4, chciałbym wykonać komendę '$ python', napisać jakieś dane wejściowe (na przykład' 1 + 1'), "nacisnąć klawisz' enter' ", pobrać trochę danych wyjściowych (' 2' w przypadku), następnie napisać kolejne wejście ('10 + 10')," naciśnij 'enter'" ponownie, uzyskaj jakieś inne wyjście, następnie wpisz inne dane itd. I takie sekwencje "wejść" nazwałem "stdins" –
tak naprawdę są pojedynczy strumień stdin, do którego chcesz wysłać wiele linii wejściowych. –