當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Dart Process.start用法及代碼示例


dart:io 庫中Process.start 方法的用法介紹如下。

用法:

Future<Process> start(
   String executable,    
   List<String> arguments,    
   {String? workingDirectory,    
   Map<String, String>? environment,    
   bool includeParentEnvironment = true,    
   bool runInShell = false,    
   ProcessStartMode mode = ProcessStartMode.normal}   
)

使用指定的 arguments 啟動運行 executable 的進程。

當進程成功啟動時,返回一個 Future<Process> 並以 Process 實例完成。該Process 對象可用於與進程交互。如果進程無法啟動,則返回的Future 以異常結束。

使用workingDirectory 設置進程的工作目錄。請注意,在某些平台上執行進程之前會發生目錄更改,這可能會在使用可執行文件和參數的相對路徑時產生影響。

使用environment 設置進程的環境變量。如果不設置,則繼承父進程的環境。目前隻支持US-ASCII環境變量,如果傳入code-points超出US-ASCII範圍的環境變量,很可能會出錯。

如果 includeParentEnvironmenttrue ,則進程的環境將包括父進程的環境,以 environment 優先。默認為 true

如果 runInShelltrue ,則該進程將通過係統 shell 生成。在 Linux 和 OS X 上,使用 /bin/sh,而在 Windows 上使用 %WINDIR%\system32\cmd.exe

用戶必須讀取以 Process.start 開頭的進程的 stdoutstderr 流上的所有數據。如果用戶沒有讀取流上的所有數據,則不會釋放底層係統資源,因為仍有待處理的數據。

以下代碼使用Process.start 在Linux 上的test.dart 文件中查找main

var process = await Process.start('grep', ['-i', 'main', 'test.dart']);
stdout.addStream(process.stdout);
stderr.addStream(process.stderr);

如果 modeProcessStartMode.normal (默認值),則子進程將在 stdinstdoutstderr 連接的情況下啟動。

如果modeProcessStartMode.detached,將創建一個分離的進程。分離的進程與其父進程沒有任何聯係,並且可以在父進程死亡時繼續運行。分離進程中唯一可用的信息是它的 pid 。與它的 stdinstdoutstderr 沒有連接,進程的退出代碼也不會在它終止時變得可用。

如果 modeProcessStartMode.detachedWithStdio 將創建一個分離的進程,其中連接了 stdinstdoutstderr 。創作者可以通過這些與孩子交流。即使這些通信通道關閉,分離的進程仍將繼續運行。進程的退出代碼在終止時將不可用。

mode 的默認值為 ProcessStartMode.normal

相關用法


注:本文由純淨天空篩選整理自dart.dev大神的英文原創作品 start method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。