아래의 테스트에서는 less pager 명령을 실행하려고 시도하고 사용자가 종료 할 때 이 반환되면 반환합니다. 문제는 사용자 입력을 기다리지 않는다는 것입니다. 은 전체 파일을 나열하고 종료합니다. 플랫폼 : 분투 12.04는 다트 편집기 빌드 : 13049.Dart에서 대화 형 프로세스를 어떻게 실행합니까?
import 'dart:io';
void main() {
shell('less', ['/etc/mime.types'], (exitCode) => exit(exitCode));
}
void shell(String cmd, List<String> opts, void onExit(int exitCode)) {
var p = Process.start(cmd, opts);
p.stdout.pipe(stdout); // Process output to stdout.
stdin.pipe(p.stdin); // stdin to process input.
p.onExit = (exitCode) {
p.close();
onExit(exitCode);
};
}
다음 커피 스크립트 기능 (I/O nodejs를 사용)는 작동합니다
shell = (cmd, opts, callback) ->
process.stdin.pause()
child = spawn cmd, opts, customFds: [0, 1, 2]
child.on 'exit', (code) ->
process.stdin.resume()
callback code
가 어떻게 다트에서이 작업을 할 수 ?
위의 답변으로 몇 가지 샘플 코드를 포함 할 계획 이었지만 현재 프로세스에서 대화 형으로 읽지 못하게하는 버그가있는 것으로 보입니다. 프로세스가 스트림을 종료 할 때까지 버퍼가 프로세스에서 플러시되지 않는 것처럼 보입니다. http://dartbug.com/5607을 기다리고 다음 코드를 게시합니다. –
훌륭한 설명 (문제 5607에 게시 한 코드)을 이용해 주셔서 감사 드리며 더 이상 벽에 머리를 두드리지 않아도됩니다. :-) –