Valaè¨èªã§å¤é¨ããã»ã¹ãå®è¡ãã(ç°¡åãªä¾ã»ã¡ã¢)
ããã§ã¯Valaè¨èªãç¨ãã¦å¤é¨ããã»ã¹ãå®è¡ããããã®å¦çãæ±ãã
å
ã
GLibã®æ©è½ãªã®ã§ãGLibã®Cè¨èªã®APIããç´æ¥ä½¿ç¨ãããã¨ãã§ããããValaè¨èªã§ã¯ããæ±ãããããªã£ã¦ããã
ããã§ã¯æãã·ã³ãã«ãªãã³ãã³ãè¡æååããå¤é¨ããã»ã¹ãå®è¡ãããå½¢ã«ã¤ãã¦ã®ã¡ã¢ãæ±ãã
- GLib.Process.spawn_command_line_async() - æãã·ã³ãã«ãªå¼ã³åºãå½¢å¼ã»éåæå¦ç
- GLib.Process.spawn_command_line_sync() - åæå¦çã§åºåã¨ã¹ãã¼ã¿ã¹å¤ãåå¾ã§ãã
- è¿ãããã¹ãã¼ã¿ã¹å¤ã¨ããã»ã¹çµäºæã®ã¹ãã¼ã¿ã¹ã«ã¤ãã¦
- ã³ãã³ãåºåå ã®æ¥æ¬èªã®æååãã«ã¤ãã¦
- é¢é£:ãspawnãã®æå³
GLib.Process.spawn_command_line_async() - æãã·ã³ãã«ãªå¼ã³åºãå½¢å¼ã»éåæå¦ç
public static bool spawn_command_line_async (string command_line) throws SpawnError;
GLib.Process.spawn_command_line_async()ã使ç¨ããã¨æå®ãããã³ãã³ãè¡æååããã¨ã«ãã¦å¤é¨ããã»ã¹ãå®è¡ãããããã®çµäºãå¾
ããã«å
ã®å¦çã«é²ã¿(éåæã§å¦çãã)ãåããã»ã¹ã®ã¹ãã¼ã¿ã¹å¤(å¾è¿°)ãç¥ããã¨ã¯ã§ããªãã
åããã»ã¹ã®å®è¡ã«å¤±æããã¨ä¾å¤GLib.SpawnErrorãçºçããã®ã§ãtry-catchæã«ããå¦çãããããã¯ä»ã®å¤é¨ããã»ã¹èµ·åé¢æ°ã§ãåæ§ã¨ãªãã
æåãããã©ããã¯çå½å¤(boolå)ã®æ»ãå¤ã¨ãã¦ãå¾ãããã
GLib.Process.spawn_command_line_sync() - åæå¦çã§åºåã¨ã¹ãã¼ã¿ã¹å¤ãåå¾ã§ãã
public static bool spawn_command_line_sync (string command_line, out string standard_output = null, out string standard_error = null, out int exit_status = null) throws SpawnError;
GLib.Process.spawn_command_line_sync()ã使ç¨ããã¨æå®ãããã³ãã³ãè¡æååãå®è¡ããçµäºã¾ã§å¾ æ©ããããã®éã«ã¯ãoutãä»ãã§åãåã£ã
- æ¨æºåºåã®æåå [string]
- æ¨æºã¨ã©ã¼åºåã®æåå [string]
- ã¹ãã¼ã¿ã¹å¤ [int]
ã®å¤æ°ãããããæ¸ãæããã
çºçããä¾å¤ã¨ãã®å¦çãæ»ãå¤ã«ã¤ãã¦ã¯GLib.Process.spawn_command_line_async()ã¨åæ§ã
è¿ãããã¹ãã¼ã¿ã¹å¤ã¨ããã»ã¹çµäºæã®ã¹ãã¼ã¿ã¹ã«ã¤ãã¦
ãPythonで外部プロセスを起動して出力と戻り値を処理するãã§æ¸ããããã«ãPythonã®subprocessã¢ã¸ã¥ã¼ã«ãç¨ããå ´åã«ã¯ã¡ã³ãé¢æ°wait()ã®æ»ãå¤ãããã»ã¹ã®çµäºæã®æ»ãå¤ã¨ãªã£ã¦ããããããã§æ±ããããã¹ãã¼ã¿ã¹å¤ãã¯「wait」のmanページãªã©ã§æ±ããã¦ããä¸è¬çãªããã»ã¹çµäºæã®ç¶æ æ å ±ã§ãçµäºæã®æ»ãå¤ä»¥å¤ã®æ å ±ãå«ãã§ãããCè¨èªã§ã¯WEXITSTATUSã¨ãããã¯ããç¨ãã¦çµäºã¹ãã¼ã¿ã¹ãåå¾ããããValaè¨èªã§ã¯GLib.Process.exit_status()ãããã¯ããå¼ã³åºããã¨ã«ãªãã*1
ä»ã®ãã¯ãã«ã¤ãã¦ãåæ§ã®é¢æ°ãGLib.Processåå空éã«ç¨æããã¦ããã
[å¼ç¨]ãã¡ã¤ã«å: vala-0.7.4/vapi/glib-2.0.vapi ãã
namespace Process { (ä¸ç¥) /* these macros are required to examine the exit status of a process */ [CCode (cname = "WIFEXITED", cheader_filename = "sys/wait.h")] public static bool if_exited (int status); [CCode (cname = "WEXITSTATUS", cheader_filename = "sys/wait.h")] public static int exit_status (int status); [CCode (cname = "WIFSIGNALED", cheader_filename = "sys/wait.h")] public static bool if_signaled (int status); [CCode (cname = "WTERMSIG", cheader_filename = "sys/wait.h")] public static ProcessSignal term_sig (int status); [CCode (cname = "WCOREDUMP", cheader_filename = "sys/wait.h")] public static bool core_dump (int status); [CCode (cname = "WIFSTOPPED", cheader_filename = "sys/wait.h")] public static bool if_stopped (int status); [CCode (cname = "WSTOPSIG", cheader_filename = "sys/wait.h")] public static ProcessSignal stop_sig (int status); [CCode (cname = "WIFCONTINUED", cheader_filename = "sys/wait.h")] public static bool if_continued (int status); }
ãcnameãã®ãã¯ãåã1è¡ä¸ã®é¢æ°åã«å¯¾å¿ãã¦ããã
ã³ãã³ãåºåå ã®æ¥æ¬èªã®æååãã«ã¤ãã¦
GLib.Process.spawn_command_line_sync()ãç¨ãã¦ã³ãã³ããå®è¡ããã¨ãã®åºåã«æ¥æ¬èªãå«ã¾ããã¨ã?ãã«åããããã®å¯¾å¦ã¨ãã¦ã¯LC_CTYPEã®ãã±ã¼ã«ãGLib.Intl.setlocale()ã§æå®ããã
weak string? lc_ctype = GLib.Environment.get_variable ("LC_CTYPE"); if (lc_ctype != null) GLib.Intl.setlocale (GLib.LocaleCategory.CTYPE, lc_ctype);
ãã ããGTK+ã¢ããªã±ã¼ã·ã§ã³ã§GUIé¨å(ããã¹ããã¥ã¼ãªã©)ã«åºåããå ´åã¯ä»£ããã«å¥ã®å¦çãè¡ã(ããã§ã¯æ±ããªã)ã
é¢é£:ãspawnãã®æå³
ãspawn(ã¹ãã¼ã³)ãã«ã¯éãªã©ããç£åµãããã¨ããæå³ãããã親ããã»ã¹ãåããã»ã¹ãåµã®ããã«ãç£ããã¨ããã¤ã¡ã¼ã¸ã§ååãä»ãããã¦ãããã®ã¨æãããã(2015/1/14)manãã¼ã¸ã®ãªã³ã¯å ãä¿®æ£
åèURL:
- GLib Reference Manual: Spawning Processes
- Man page of WAIT - ã¹ãã¼ã¿ã¹å¤ã«ã¤ãã¦
使ç¨ãããã¼ã¸ã§ã³:
- Vala 0.7.4