⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 processmanagementandcommunication.mht

📁 Perl 编程技巧大全。适合初学者阅读。
💻 MHT
📖 第 1 页 / 共 5 页
字号:
</FONT>$output =3D <FONT color=3D#00cd00>`cmd 2&gt;&amp;1`</FONT><FONT =
color=3D#00ffff>;</FONT>                          <FONT =
color=3D#bebebe># with backticks
# or
</FONT>$pid =3D <FONT color=3D#98fb98>open</FONT><FONT =
color=3D#00ffff>(</FONT>PH, <FONT color=3D#00cd00>"cmd 2&gt;&amp;1 =
|"</FONT><FONT color=3D#00ffff>);</FONT>                 <FONT =
color=3D#bebebe># with an open pipe
</FONT><FONT color=3D#ffa500>while</FONT> <FONT =
color=3D#00ffff>(</FONT>&lt;PH&gt;<FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#00ffff>{</FONT> <FONT color=3D#00ffff>}</FONT>                  =
             <FONT color=3D#bebebe># plus a read
#-----------------------------
</FONT>$output =3D <FONT color=3D#00cd00>`cmd =
2&gt;/dev/null`</FONT><FONT color=3D#00ffff>;</FONT>                   =
<FONT color=3D#bebebe># with backticks
# or
</FONT>$pid =3D <FONT color=3D#98fb98>open</FONT><FONT =
color=3D#00ffff>(</FONT>PH, <FONT color=3D#00cd00>"cmd 2&gt;/dev/null =
|"</FONT><FONT color=3D#00ffff>);</FONT>          <FONT =
color=3D#bebebe># with an open pipe
</FONT><FONT color=3D#ffa500>while</FONT> <FONT =
color=3D#00ffff>(</FONT>&lt;PH&gt;<FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#00ffff>{</FONT> <FONT color=3D#00ffff>}</FONT>                  =
             <FONT color=3D#bebebe># plus a read
#-----------------------------
</FONT>$output =3D <FONT color=3D#00cd00>`cmd 2&gt;&amp;1 =
1&gt;/dev/null`</FONT><FONT color=3D#00ffff>;</FONT>              <FONT =
color=3D#bebebe># with backticks
# or
</FONT>$pid =3D <FONT color=3D#98fb98>open</FONT><FONT =
color=3D#00ffff>(</FONT>PH, <FONT color=3D#00cd00>"cmd 2&gt;&amp;1 =
1&gt;/dev/null |"</FONT><FONT color=3D#00ffff>);</FONT>     <FONT =
color=3D#bebebe># with an open pipe
</FONT><FONT color=3D#ffa500>while</FONT> <FONT =
color=3D#00ffff>(</FONT>&lt;PH&gt;<FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#00ffff>{</FONT> <FONT color=3D#00ffff>}</FONT>                  =
             <FONT color=3D#bebebe># plus a read
#-----------------------------
</FONT>$output =3D <FONT color=3D#00cd00>`cmd 3&gt;&amp;1 1&gt;&amp;2 =
2&gt;&amp;3 3&gt;&amp;-`</FONT><FONT color=3D#00ffff>;</FONT>           =
<FONT color=3D#bebebe># with backticks
# or
</FONT>$pid =3D <FONT color=3D#98fb98>open</FONT><FONT =
color=3D#00ffff>(</FONT>PH, <FONT color=3D#00cd00>"cmd 3&gt;&amp;1 =
1&gt;&amp;2 2&gt;&amp;3 3&gt;&amp;-|"</FONT><FONT =
color=3D#00ffff>);</FONT>   <FONT color=3D#bebebe># with an open pipe
</FONT><FONT color=3D#ffa500>while</FONT> <FONT =
color=3D#00ffff>(</FONT>&lt;PH&gt;<FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#00ffff>{</FONT> <FONT color=3D#00ffff>}</FONT>                  =
             <FONT color=3D#bebebe># plus a read
#-----------------------------
</FONT><FONT color=3D#98fb98>system</FONT><FONT =
color=3D#00ffff>(</FONT><FONT color=3D#00cd00>"program args =
1&gt;/tmp/program.stdout 2&gt;/tmp/program.stderr"</FONT><FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT>$output =3D <FONT color=3D#00cd00>`cmd 3&gt;&amp;1 1&gt;&amp;2 =
2&gt;&amp;3 3&gt;&amp;-`</FONT><FONT color=3D#00ffff>;</FONT><FONT =
color=3D#43cd80>        </FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT>$fd3 =3D $fd1<FONT color=3D#00ffff>;</FONT>
$fd1 =3D $fd2<FONT color=3D#00ffff>;</FONT>
$fd2 =3D $fd3<FONT color=3D#00ffff>;</FONT>
$fd3 =3D <FONT color=3D#ff7f50>undef</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#98fb98>system</FONT><FONT =
color=3D#00ffff>(</FONT><FONT color=3D#00cd00>"prog args 1&gt;tmpfile =
2&gt;&amp;1"</FONT><FONT color=3D#00ffff>);</FONT>
<FONT color=3D#98fb98>system</FONT><FONT color=3D#00ffff>(</FONT><FONT =
color=3D#00cd00>"prog args 2&gt;&amp;1 1&gt;tmpfile"</FONT><FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#bebebe>#-----------------------------
# system ("prog args 1&gt;tmpfile 2&gt;&amp;1");
</FONT>$fd1 =3D <FONT color=3D#00cd00>"tmpfile"</FONT><FONT =
color=3D#00ffff>;</FONT>        <FONT color=3D#bebebe># change stdout =
destination first
</FONT>$fd2 =3D $fd1<FONT color=3D#00ffff>;</FONT>             <FONT =
color=3D#bebebe># now point stderr there, too
#-----------------------------
# system("prog args 2&gt;&amp;1 1&gt;tmpfile");
</FONT>$fd2 =3D $fd1<FONT color=3D#00ffff>;</FONT>             <FONT =
color=3D#bebebe># stderr same destination as stdout
</FONT>$fd1 =3D <FONT color=3D#00cd00>"tmpfile"</FONT><FONT =
color=3D#00ffff>;</FONT>        <FONT color=3D#bebebe># but change =
stdout destination</FONT><FONT color=3D#43cd80> </FONT><FONT =
color=3D#bebebe>
#-----------------------------
</FONT></PRE></FONT></TD></TR></TBODY></TABLE></DIV>
<DIV class=3DSECT2>
<H2 class=3DSECT2><A name=3DAEN872>Controlling Input and Output of =
Another=20
Program</A></H2>
<TABLE width=3D"100%" bgColor=3D#2f4f4f border=3D0>
  <TBODY>
  <TR>
    <TD><PRE class=3DSCREEN><FONT color=3D#f5deb3 size=3D+1><FONT =
color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>IPC::Open2</FONT><FONT color=3D#00ffff>;</FONT>

open2<FONT color=3D#00ffff>(</FONT>*README, *WRITEME, $program<FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#ff7f50>print</FONT> WRITEME <FONT color=3D#00cd00>"here's =
your input\n"</FONT><FONT color=3D#00ffff>;</FONT>
$output =3D &lt;README&gt;<FONT color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>close</FONT><FONT =
color=3D#00ffff>(</FONT>WRITEME<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#98fb98>close</FONT><FONT =
color=3D#00ffff>(</FONT>README<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#98fb98>open</FONT><FONT =
color=3D#00ffff>(</FONT>DOUBLE_HANDLE, <FONT color=3D#00cd00>"| program =
args |"</FONT><FONT color=3D#00ffff>)</FONT>     <FONT color=3D#bebebe># =
WRONG
#-----------------------------
</FONT><FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>IPC::Open2</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>IO::Handle</FONT><FONT color=3D#00ffff>;</FONT>

<FONT color=3D#00ffff>(</FONT>$reader, $writer<FONT =
color=3D#00ffff>)</FONT> =3D <FONT =
color=3D#00ffff>(</FONT>IO::Handle-&gt;new, IO::Handle-&gt;new<FONT =
color=3D#00ffff>);</FONT>
open2<FONT color=3D#00ffff>(</FONT>$reader, $writer, $program<FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#ffa500>eval</FONT> <FONT color=3D#00ffff>{</FONT>
    open2<FONT color=3D#00ffff>(</FONT>$readme, $writeme, <FONT =
color=3D#cdad00>@program_and_arguments</FONT><FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#00ffff>};</FONT>
<FONT color=3D#ffa500>if</FONT> <FONT color=3D#00ffff>(</FONT>$@<FONT =
color=3D#00ffff>)</FONT> <FONT color=3D#00ffff>{</FONT><FONT =
color=3D#43cd80> </FONT>
    <FONT color=3D#ffa500>if</FONT> <FONT color=3D#00ffff>(</FONT>$@ =
=3D~ /^open2/<FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#00ffff>{</FONT>
        <FONT color=3D#98fb98>warn</FONT> <FONT color=3D#00cd00>"open2 =
failed: $!\n$@\n"</FONT><FONT color=3D#00ffff>;</FONT>
        <FONT color=3D#ffa500>return</FONT><FONT =
color=3D#00ffff>;</FONT>
    <FONT color=3D#00ffff>}</FONT>
    <FONT color=3D#ffa500>die</FONT><FONT color=3D#00ffff>;</FONT>       =
     <FONT color=3D#bebebe># reraise unforeseen exception
</FONT><FONT color=3D#00ffff>}</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT></PRE></FONT></TD></TR></TBODY></TABLE></DIV>
<DIV class=3DSECT2>
<H2 class=3DSECT2><A name=3DAEN875>Controlling the Input, Output, and =
Error of=20
Another Program</A></H2>
<TABLE width=3D"100%" bgColor=3D#2f4f4f border=3D0>
  <TBODY>
  <TR>
    <TD><PRE class=3DSCREEN><FONT color=3D#f5deb3 size=3D+1><FONT =
color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#cdad00>@all</FONT> =3D <FONT =
color=3D#00cd00>`($cmd | sed -e 's/^/stdout: /' ) =
2&gt;&amp;1`</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>for</FONT> <FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdad00>@all</FONT><FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#00ffff>{</FONT> <FONT color=3D#ff7f50>push</FONT> @<FONT =
color=3D#00ffff>{</FONT> <FONT color=3D#ff7f50>s</FONT>/stdout: // ? =
\<FONT color=3D#cdad00>@outlines</FONT> : \<FONT =
color=3D#cdad00>@errlines</FONT> <FONT color=3D#00ffff>}</FONT>, $_ =
<FONT color=3D#00ffff>}</FONT>
<FONT color=3D#ff7f50>print</FONT> <FONT =
color=3D#00cd00>"STDOUT:\n"</FONT>, <FONT =
color=3D#cdad00>@outlines</FONT>, <FONT color=3D#00cd00>"\n"</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>print</FONT> <FONT =
color=3D#00cd00>"STDERR:\n"</FONT>, <FONT =
color=3D#cdad00>@errlines</FONT>, <FONT color=3D#00cd00>"\n"</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT>open3<FONT color=3D#00ffff>(</FONT>*WRITEHANDLE, *READHANDLE, =
*ERRHANDLE, <FONT color=3D#00cd00>"program to run"</FONT><FONT =
color=3D#00ffff>);</FONT>
<FONT color=3D#bebebe>#-----------------------------
</FONT><FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>IPC::Open3</FONT><FONT color=3D#00ffff>;</FONT>
$pid =3D open3<FONT color=3D#00ffff>(</FONT>*HIS_IN, *HIS_OUT, *HIS_ERR, =
$cmd<FONT color=3D#00ffff>);</FONT>
<FONT color=3D#98fb98>close</FONT><FONT =
color=3D#00ffff>(</FONT>HIS_IN<FONT color=3D#00ffff>);</FONT>  <FONT =
color=3D#bebebe># give end of file to kid, or feed him
</FONT><FONT color=3D#cdad00>@outlines</FONT> =3D &lt;HIS_OUT&gt;<FONT =
color=3D#00ffff>;</FONT>              <FONT color=3D#bebebe># read till =
EOF
</FONT><FONT color=3D#cdad00>@errlines</FONT> =3D &lt;HIS_ERR&gt;<FONT =
color=3D#00ffff>;</FONT>              <FONT color=3D#bebebe># XXX: block =
potential if massive
</FONT><FONT color=3D#ff7f50>print</FONT> <FONT =
color=3D#00cd00>"STDOUT:\n"</FONT>, <FONT =
color=3D#cdad00>@outlines</FONT>, <FONT color=3D#00cd00>"\n"</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#ff7f50>print</FONT> <FONT =
color=3D#00cd00>"STDERR:\n"</FONT>, <FONT =
color=3D#cdad00>@errlines</FONT>, <FONT color=3D#00cd00>"\n"</FONT><FONT =
color=3D#00ffff>;</FONT>
<FONT color=3D#bebebe>#-----------------------------
# <FONT size=3D-1><A =
href=3D"http://pleac.sourceforge.net/include/perl/ch16/cmd3sel">download =
the following standalone program</A></FONT>
#!/usr/bin/perl
# cmd3sel - control all three of kids in, out, and error.
</FONT><FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>IPC::Open3</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#ffa500>use</FONT> <FONT =
color=3D#b2dfee>IO::Select</FONT><FONT color=3D#00ffff>;</FONT>

$cmd =3D <FONT color=3D#00cd00>"grep vt33 /none/such - =
/etc/termcap"</FONT><FONT color=3D#00ffff>;</FONT>
$pid =3D open3<FONT color=3D#00ffff>(</FONT>*CMD_IN, *CMD_OUT, *CMD_ERR, =
$cmd<FONT color=3D#00ffff>);</FONT>

<FONT color=3D#cdcd00>$SIG</FONT><FONT color=3D#00ffff>{</FONT><FONT =
color=3D#00cd00>CHLD</FONT><FONT color=3D#00ffff>}</FONT> =3D <FONT =
color=3D#ffa500>sub</FONT> <FONT color=3D#00ffff>{</FONT>
    <FONT color=3D#ff7f50>print</FONT> <FONT color=3D#00cd00>"REAPER: =
status $? on $pid\n"</FONT> <FONT color=3D#ffa500>if</FONT> <FONT =
color=3D#98fb98>waitpid</FONT><FONT color=3D#00ffff>(</FONT>$pid, <FONT =
color=3D#cdcd00>0</FONT><FONT color=3D#00ffff>)</FONT> &gt; <FONT =
color=3D#cdcd00>0</FONT>
<FONT color=3D#00ffff>};</FONT>

<FONT color=3D#ff7f50>print</FONT> CMD_IN <FONT color=3D#00cd00>"This =
line has a vt33 lurking in it\n"</FONT><FONT color=3D#00ffff>;</FONT>
<FONT color=3D#98fb98>close</FONT><FONT =
color=3D#00ffff>(</FONT>CMD_IN<FONT color=3D#00ffff>);</FONT>

$selector =3D IO::Select-&gt;new<FONT color=3D#00ffff>();</FONT>
$selector-&gt;add<FONT color=3D#00ffff>(</FONT>*CMD_ERR, *CMD_OUT<FONT =
color=3D#00ffff>);</FONT>

<FONT color=3D#ffa500>while</FONT> <FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdad00>@ready</FONT> =3D $selector-&gt;can_<FONT =
color=3D#98fb98>read</FONT><FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#00ffff>{</FONT>
    <FONT color=3D#ffa500>foreach</FONT> <FONT =
color=3D#9ac0cd>$fh</FONT> <FONT color=3D#00ffff>(</FONT><FONT =
color=3D#cdad00>@ready</FONT><FONT color=3D#00ffff>)</FONT> <FONT =
color=3D#00ffff>{</FONT>
        <FONT color=3D#ffa500>if</FONT> <FONT =
color=3D#00ffff>(</FONT><FONT color=3D#98fb98>fileno</FONT><FONT =
color=3D#00ffff>(</FONT>$fh<FONT color=3D#00ffff>)</FONT> =3D=3D <FONT =
color=3D#98fb98>fileno</FONT><FONT color=3D#00ffff>(</FONT>CMD_ERR<FONT =
color=3D#00ffff>))</FONT> <FONT color=3D#00ffff>{</FONT><FONT =
color=3D#ff7f50>print</FONT> <FONT color=3D#00cd00>"STDERR: "</FONT>, =
<FONT color=3D#ff7f50>scalar</FONT> &lt;CMD_ERR&gt;<FONT =
color=3D#00ffff>}</FONT>
        <FONT color=3D#ffa500>else</FONT>                                =
<FONT color=3D#00ffff>{</FONT><FONT color=3D#ff7f50>print</FONT> <FONT =
color=3D#00cd00>"STDOUT: "</FONT>, <FONT color=3D#ff7f50>scalar</FONT> =
&lt;CMD_OUT&gt;<FONT color=3D#00ffff>}</FONT>
        $selector-&gt;remove<FONT color=3D#00ffff>(</FONT>$fh<FONT =
color=3D#00ffff>)</FONT> <FONT color=3D#ffa500>if</FONT> <FONT =

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -