掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ActivePerlの標準入出力の操作 (ID:33436)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
コンソールでテストコードを書いてみました。 標準入力や出力の受渡は正常にできてるみたいです。 (フラッシュしたらプログラム側で受け取れます) ただ、標準入力で#$1A を渡してもループを抜けられませんね。 コマンドラインでも、ファイルに1Aをバイナリで記述して渡すと終了しません。 テキストモードだと行ける、という話がありますが、 binmode STDIN, ":crlf" とかしても上手くいかず。 うーん。 とりあえず、Delphiは関係ない気がしますw ------- program console_test; {$APPTYPE CONSOLE} uses SysUtils, Windows, DosCommand in '..\DosCommand.pas'; type TDosCommandTest = class procedure OnNewLine(Sender: TObject; NewLine: string; OutputType: TOutputType); function Main: TDosCommandTest; end; procedure TDosCommandTest.OnNewLine(Sender: TObject; NewLine: string; OutputType: TOutputType); begin if OutputType = otEntireLine then Writeln('Cmd: ', NewLine); end; function TDosCommandTest.Main(): TDosCommandTest; var i: Integer; Cmd: TDosCommand; begin Cmd := TDosCommand.Create(nil); try Cmd.CommandLine := 'perl test.pl'; Cmd.InputToOutput := True; Cmd.OnNewLine := OnNewLine; Cmd.Execute; // wait while Cmd.IsRunning do begin // ESCAPEで強制終了 if (GetAsyncKeyState(VK_ESCAPE) and $8000) <> 0 then break; // Zでテスト出力 if (GetAsyncKeyState(Ord('Z')) and $8000) <> 0 then Cmd.SendLine('test', True); // Xで終了コード?を送る (うまくいかず) if (GetAsyncKeyState(Ord('X')) and $8000) <> 0 then Cmd.SendLine(#$1A, True); Sleep(100); end; finally FreeAndNil(Cmd); end; Writeln('DONE!'); Result := Self; end; begin TDosCommandTest.Create.Main.Free; end. -----test.pl----- $| = 1; print "Start\n"; $i = 0; while($a = <>){ print "Loop: $a $i\n"; $i++; } print "End\n";
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.