Valaè¨èªã§å¤é¨ããã»ã¹ãå®è¡ãã(ç°¡åãªä¾ã»ã³ã¼ãä¾ã¨åºåçµæ)
ãVala言語で外部プロセスを実行する(簡単な例・メモ)ãã®ç¶ãã
ããã§ã¯GLib.Process.spawn_command_line_async()ã¨GLib.Process.spawn_command_line_sync()ã®ãããããç¨ãããã¹ãã³ã¼ãã¨ãã®å®è¡çµæãè²¼ãä»ããã
- GLib.Process.spawn_command_line_async()ã使ç¨ããä¾
- GLib.Process.spawn_command_line_sync()ã使ç¨ããä¾
GLib.Process.spawn_command_line_async()ã使ç¨ããä¾
[ä»»æ]ãã¡ã¤ã«å: spawncmdlineasynctest.valausing GLib; /* * valac -o spawncmdlineasynctest spawncmdlineasynctest.vala * valac -D FAIL -o spawncmdlineasynctest_fail spawncmdlineasynctest.vala * valac -D WAIT -o spawncmdlineasynctest_wait spawncmdlineasynctest.vala */ namespace SpawnCmdlineAsyncTest { class MainClass { public static int main (string[] args) { #if FAIL string cmdline = "ls -5"; // 失æããä¾ #elif WAIT string cmdline = "sleep 2"; // æéã®ãããä¾ #else string cmdline = "cal 7 2009"; #endif try { /* * asyncçã¯èµ·åããããã®å¾ã®æ å ±ã¯åå¾ã§ããªã * ã¡ãã»ã¼ã¸åºåãªã©ã¯ãã®ã¾ã¾ç«¯æ«ã¸ * æåãããã©ããã¯æ»ãå¤ã§çå½å¤ã¨ãã¦å¾ããã¨ãã§ãã */ GLib.Process.spawn_command_line_async (cmdline); } catch (GLib.SpawnError e) // åããã»ã¹èµ·åã«å¤±æ { print ("spawn failed: %s\n", e.message); return 1; } return 0; } } }
ä¸ã¯å®è¡çµæãæå¾ã®sleepã³ãã³ãã®ä¾ã§ã¯åããã»ã¹ã®çµäºã¨ç¡é¢ä¿ã«ããã°ã©ã ãçµäºãã¦ããã®ãåããã
(æ£å¸¸ã«çµäºããä¾) $ ./spawncmdlineasynctest 7æ 2009 æ¥ æ ç« æ°´ æ¨ é å 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 (ã¨ã©ã¼ã«ãªãä¾) $ ./spawncmdlineasynctest_fail ls: invalid option -- '5' 詳ãã㯠`ls --help' ãå®è¡ãã¦ä¸ãã. (åæ¢ããä¾) $ ./spawncmdlineasynctest_wait (ããã«çµäºãã)
GLib.Process.spawn_command_line_sync()ã使ç¨ããä¾
[ä»»æ]ãã¡ã¤ã«å: spawncmdlinesynctest.valausing GLib; /* * valac -o spawncmdlinesynctest spawncmdlinesynctest.vala * valac -D FAIL -o spawncmdlinesynctest_fail spawncmdlinesynctest.vala * valac -D WAIT -o spawncmdlinesynctest_wait spawncmdlinesynctest.vala */ namespace SpawnCmdlineSyncTest { class MainClass { public static int main (string[] args) { #if FAIL string cmdline = "ls -5"; // 失æããä¾ #elif WAIT string cmdline = "sleep 2"; // æéã®ãããä¾ #else string cmdline = "cal 7 2009"; #endif string out_stdout, out_stderr; int status; /* LC_CTYPEãsetlocale()ã§æå®ããªãã¨æ¥æ¬èªãã?ãã«ãªã */ weak string? lc_ctype = GLib.Environment.get_variable ("LC_CTYPE"); if (lc_ctype != null) GLib.Intl.setlocale (GLib.LocaleCategory.CTYPE, lc_ctype); try { /* * ä¸ã§æ¨æºåºå/æ¨æºã¨ã©ã¼åºåã®æååã¨ã¹ãã¼ã¿ã¹å¤ãã»ããããã * æåãããã©ããã¯æ»ãå¤ã§çå½å¤ã¨ãã¦å¾ããã¨ãã§ãã */ GLib.Process.spawn_command_line_sync (cmdline, out out_stdout, out out_stderr, out status); print ("-- stdout begin --\n%s-- stdout end --\n\n", out_stdout); print ("-- stderr begin --\n%s-- stderr end --\n\n", out_stderr); print ("raw status: %d", status); if (GLib.Process.if_exited (status)) print (" exit status: %d", GLib.Process.exit_status (status)); print ("\n"); } catch (GLib.SpawnError e) // åããã»ã¹èµ·åã«å¤±æ { print ("spawn failed: %s\n", e.message); return 1; } return 0; } } }
(2009/7/22)GLib.Process.if_exited()(Cè¨èªã®WIFEXITEDãã¯ã)ã使ç¨ãã¦ã¹ãã¼ã¿ã¹å¤ããã§ãã¯ãã¦ããGLib.Process.exit_status()ãå¼ã¶ããã«ä¿®æ£
ä¸ã¯å®è¡çµæãã¨ã©ã¼ã«ãªãä¾ã§ã¯GLib.Process.exit_status()ã«ããã¹ãã¼ã¿ã¹å¤ããæ»ãå¤(çµäºã¹ãã¼ã¿ã¹)ãå¾ããã¦ããã®ãåããã
(æ£å¸¸ã«çµäºããä¾) $ ./spawncmdlinesynctest -- stdout begin -- 7æ 2009 æ¥ æ ç« æ°´ æ¨ é å 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 -- stdout end -- -- stderr begin -- -- stderr end -- raw status: 0 exit status: 0 (ã¨ã©ã¼ã«ãªãä¾) $ ./spawncmdlinesynctest_fail -- stdout begin -- -- stdout end -- -- stderr begin -- ls: invalid option -- '5' 詳ãã㯠`ls --help' ãå®è¡ãã¦ä¸ãã. -- stderr end -- raw status: 512 exit status: 2 (åæ¢ããä¾) $ ./spawncmdlinesynctest_wait (2ç§éåæ¢ãã) -- stdout begin -- -- stdout end -- -- stderr begin -- -- stderr end -- raw status: 0 exit status: 0
ãªããã³ã¼ãä¸ã®LC_CTYPEã®æå®ãè¡ãé¨åãåé¤ããã¨ä¸ã®ããã«æ¥æ¬èªãåããã
$ ./spawncmdlinesynctest -- stdout begin -- 7? 2009 ? ? ? ? ? ? ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 -- stdout end -- -- stderr begin -- -- stderr end -- raw status: 0 exit status: 0
使ç¨ãããã¼ã¸ã§ã³:
- Vala 0.7.4