EXEC

ページ名:EXEC

EXEC

[Process =] EXECコマンド[WAIT] [FOR {{READ |}}入力} {書き込み| [AS名]
EXECコマンドのTO変数

子プロセスを実行してコマンドを実行します。
コマンドを管理するための内部 Processオブジェクトが作成されます。

 

 

Standard syntax

 EXECに渡されるコマンドは、コンマ区切りの文字列定数のリストまたは配列として指定する必要があります。 list / arrayの最初の要素はコマンドの名前で、他の要素はコマンドのパラメータです(もしあれば)。

    WAITが指定されている場合、インタプリタはコマンドが完了するのを待ちます。そうでなければ、コマンドはバックグラウンドで実行され、プログラムは実行を継続します。

    コマンドをチェーニングしたい場合はWAITキーワードを忘れないでください。そうしないと、最初のコマンドが終了する前に2番目のコマンドが開始されます。
  •     FORが指定されている場合は、コマンド入出力がリダイレクトされ、プログラムがそれらをインターセプトします。
  1. WRITEを指定した場合、共通の出力命令を持つProcessオブジェクトを使用して、コマンド標準入力にデータを送信できます。PRINT、WRITE、... Processオブジェクトへの参照が必要であることに注意してください。
  2. READが指定されている場合、コマンドがデータを標準出力ストリームに送信するたびにイベントが生成されます。Readイベントはデータが標準出力ストリームに送信されると発生し、Errorイベントはデータが標準出力ストリームに送信されると発生しますエラーストリームプロセス標準出力を読み込むには、Stream&Input / Output関数でプロセスオブジェクトを使用します。
  3. READおよびWRITEの代わりにINPUTおよびOUTPUTキーワードを使用すると、プロセスは仮想端末の内部で実行されます。プロセスは本当の端末の中で走っていると考えるでしょう。

 

  • Nameは、Processオブジェクトによって使用されるイベント名です。デフォルトでは「Process」です。
Gambas 3では、デフォルトのイベント名はもうありません。

    言い換えれば、Gambas 2と同じ振る舞いをするためにAS "Process"を追加しなければなりません。

割り当てを使用して作成された内部Processオブジェクトへの参照を取得できます。

 

Program Search

コマンドは絶対パスまたはプログラム名として指定できます。
コマンドがプログラム名として指定されている場合、そのプログラムはPATH環境変数を介して検索されます。この機能は便利ですが、起動時間が遅くなります。

System.Findメソッドを使用して、PATH環境変数を介してプログラムを検索することができます。

その後、返された絶対パスを変数に格納し、後でEXECを使用して検索手順を繰り返さなくてもプログラムを起動できます。
クイック構文

Quick Syntax

2番目の形式の構文を使用すると、

 

'EXEC Command  変数です。

インタプリタはコマンドが完了するのを待ってから、指定された文字列に完全なコマンド出力を入れます。
コマンドの実行中は、実行中のプロセスを制御できません。
プロセスの標準出力のみが取得されます。エラー出力はリダイレクトされません。

Environment

コマンド引数の直後にWITHキーワードを使用して、実行中のプロセスに新しい環境変数を指定できます。

[ Process = ] EXEC Command WITH Environment ...

環境は文字列の配列で、各文字列は "NAME = VALUE"の形式になります。 NAMEは環境変数の名前、VALUEはその値です。

環境変数を消去したい場合は、文字列 "NAME ="を使用してください。

 

Running Inside A Virtual Terminal

プロセスが仮想端末内で実行される場合、つまり、FOR INPUT / OUTPUT構文を使用する場合は、実際の端末内で入力した場合と同じ効果を得るためにプロセス標準入力に制御文字を送信できます。 ^ Cはプロセスを停止し、^ Zはそれを中断します。

仮想端末には出力が1つだけあります。その結果、実行中プロセスの標準エラー出力は、Readイベントを通じて受信されます。

 

プログラムによっては、仮想端末内で実行している場合にのみアクセス可能なコマンド行インターフェースを備えています。

 

標準入力にコマンドを送信してアプリケーションを制御する場合は、開発環境内のコンソールは真の仮想端末ではないため、テストはIDEの外部で実行する必要があります(つまり、実行可能ファイルを作成してコマンドラインから起動します)。 予期しない結果を招きます。
IDEコンソールは、Gambas 3.9以降、真のターミナルエミュレータになりました。

Examples

'ディレクトリの内容を取得する
Exec ["ls", "-la", "/tmp"] Wait
'ディレクトリの内容を文字列にする
Dim sOutput As String
Exec ["ls", "-la", "/tmp"] To sOutput
Print sOutput
'オプションに値を設定する方法:/ tmpディレクトリの内容を表示
'lsに--hideオプションを使用したディレクトリ。


' Either use = longオプションと値を分離し、両方を1つの配列メンバーに入れる
Exec ["ls", "-l", "--hide=*gambas*", "/tmp"] Wait

'または新しい配列メンバを使用してください。 これは短いオプションで使用する必要があります。
Exec ["ls", "-l", "--hide", "*gambas*", "/tmp"] Wait
'ディレクトリの内容を文字列にしますが、バックグラウンドで
Public sOutput As String

Public Sub Main()

'特定のイベント名が使用されています
Exec ["ls", "-la", "/tmp"] For Read As "Contents"

End

Public Sub Contents_Read()

Dim sLine As
String

Read #Last, sLine, -256

sOutput &= sLine

End

Public Sub Contents_Kill()

Print sOutput

End

Process_Readイベントハンドラで読み込むことができるバイト数を知りたい場合は、Lof関数を使用してください。

引数はプロセスに直接送信されるので、シェルで行う必要があるので、それらを引用符で囲む必要はありません。

'>; perl -e '印刷中に<>;' になる

Exec ["perl", "-e", "print while <>;"] For Read Write

See also

シェアボタン: このページをSNSに投稿するのに便利です。

コメント

返信元返信をやめる

※ 悪質なユーザーの書き込みは制限します。

最新を表示する

NG表示方式

NGID一覧