hxt-8.0.0: doc/hdoc/src/System-PipeOpen.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
<title>Haskell Code by HsColour</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='comment'>-- ------------------------------------------------------------</span>
<a name="line-2"></a>
<a name="line-3"></a><span class='comment'>{- |
<a name="line-4"></a> Module : System.PipeOpen
<a name="line-5"></a> Copyright : Copyright (C) 2005 Uwe Schmidt
<a name="line-6"></a> License : MIT
<a name="line-7"></a>
<a name="line-8"></a> Maintainer : Uwe Schmidt (uwe\@fh-wedel.de)
<a name="line-9"></a> Stability : experimental
<a name="line-10"></a> Portability: none portable
<a name="line-11"></a> Version : $Id: PipeOpen.hs,v 1.2 2005/09/02 17:09:39 hxml Exp $
<a name="line-12"></a>
<a name="line-13"></a>pipe open implemented with System.Process functions
<a name="line-14"></a>
<a name="line-15"></a>-}</span>
<a name="line-16"></a>
<a name="line-17"></a><span class='comment'>-- ------------------------------------------------------------</span>
<a name="line-18"></a>
<a name="line-19"></a><span class='keyword'>module</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>PipeOpen</span>
<a name="line-20"></a> <span class='layout'>(</span> <span class='varid'>popen</span> <span class='layout'>)</span>
<a name="line-21"></a><span class='keyword'>where</span>
<a name="line-22"></a>
<a name="line-23"></a><span class='keyword'>import</span> <span class='conid'>IO</span>
<a name="line-24"></a> <span class='layout'>(</span> <span class='varid'>hGetContents</span>
<a name="line-25"></a> <span class='layout'>,</span> <span class='varid'>hClose</span>
<a name="line-26"></a> <span class='layout'>)</span>
<a name="line-27"></a>
<a name="line-28"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>Exit</span>
<a name="line-29"></a> <span class='layout'>(</span> <span class='conid'>ExitCode</span><span class='layout'>(</span><span class='keyglyph'>..</span><span class='layout'>)</span>
<a name="line-30"></a> <span class='layout'>)</span>
<a name="line-31"></a>
<a name="line-32"></a><span class='keyword'>import</span> <span class='conid'>System</span><span class='varop'>.</span><span class='conid'>Process</span>
<a name="line-33"></a> <span class='layout'>(</span> <span class='varid'>runInteractiveProcess</span>
<a name="line-34"></a> <span class='layout'>,</span> <span class='varid'>waitForProcess</span>
<a name="line-35"></a> <span class='layout'>)</span>
<a name="line-36"></a>
<a name="line-37"></a><span class='comment'>-- | call an external program with a list of command line arguments</span>
<a name="line-38"></a><span class='comment'>-- and return content of stdout, content of stderr and return code</span>
<a name="line-39"></a>
<a name="line-40"></a><a name="popen"></a><span class='definition'>popen</span> <span class='keyglyph'>::</span> <span class='conid'>String</span> <span class='keyglyph'>-></span> <span class='keyglyph'>[</span><span class='conid'>String</span><span class='keyglyph'>]</span> <span class='keyglyph'>-></span> <span class='conid'>IO</span> <span class='layout'>(</span><span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>Int</span><span class='layout'>)</span>
<a name="line-41"></a><span class='definition'>popen</span> <span class='varid'>prg</span> <span class='varid'>argl</span>
<a name="line-42"></a> <span class='keyglyph'>=</span> <span class='keyword'>do</span>
<a name="line-43"></a> <span class='layout'>(</span><span class='varid'>inpH</span><span class='layout'>,</span> <span class='varid'>outH</span><span class='layout'>,</span> <span class='varid'>errH</span><span class='layout'>,</span> <span class='varid'>pH</span><span class='layout'>)</span> <span class='keyglyph'><-</span> <span class='varid'>runInteractiveProcess</span> <span class='varid'>prg</span> <span class='varid'>argl</span> <span class='conid'>Nothing</span> <span class='conid'>Nothing</span>
<a name="line-44"></a> <span class='varid'>hClose</span> <span class='varid'>inpH</span>
<a name="line-45"></a> <span class='varid'>res</span> <span class='keyglyph'><-</span> <span class='varid'>hGetContents</span> <span class='varid'>outH</span>
<a name="line-46"></a> <span class='varid'>errs</span> <span class='keyglyph'><-</span> <span class='varid'>hGetContents</span> <span class='varid'>errH</span>
<a name="line-47"></a>
<a name="line-48"></a> <span class='comment'>-- hack: stdout and stderr must be read completely, otherwise waitForProcess blocks</span>
<a name="line-49"></a> <span class='keyword'>if</span> <span class='layout'>(</span><span class='varid'>length</span> <span class='varid'>res</span> <span class='varop'>==</span> <span class='num'>0</span><span class='layout'>)</span> <span class='keyword'>then</span> <span class='varid'>return</span> <span class='conid'>()</span> <span class='keyword'>else</span> <span class='varid'>return</span> <span class='conid'>()</span>
<a name="line-50"></a> <span class='keyword'>if</span> <span class='layout'>(</span><span class='varid'>length</span> <span class='varid'>errs</span> <span class='varop'>==</span> <span class='num'>0</span><span class='layout'>)</span> <span class='keyword'>then</span> <span class='varid'>return</span> <span class='conid'>()</span> <span class='keyword'>else</span> <span class='varid'>return</span> <span class='conid'>()</span>
<a name="line-51"></a>
<a name="line-52"></a> <span class='varid'>rc</span> <span class='keyglyph'><-</span> <span class='varid'>waitForProcess</span> <span class='varid'>pH</span>
<a name="line-53"></a> <span class='varid'>return</span> <span class='layout'>(</span> <span class='varid'>res</span>
<a name="line-54"></a> <span class='layout'>,</span> <span class='varid'>errs</span>
<a name="line-55"></a> <span class='layout'>,</span> <span class='keyword'>case</span> <span class='varid'>rc</span> <span class='keyword'>of</span>
<a name="line-56"></a> <span class='conid'>ExitSuccess</span> <span class='keyglyph'>-></span> <span class='num'>0</span>
<a name="line-57"></a> <span class='conid'>ExitFailure</span> <span class='varid'>i</span> <span class='keyglyph'>-></span> <span class='varid'>i</span>
<a name="line-58"></a> <span class='layout'>)</span>
<a name="line-59"></a>
<a name="line-60"></a><span class='comment'>-- eof ------------------------------------------------------------</span>
</pre></body>
</html>