有没有办法让这个perl代码从tcsh中捕获stderr和stdout?
我还阅读了关于perl常见问题的讨论,但这与bash有关:尝试将句柄2(stderr)重定向到句柄1(stdout),如下所示 打开单元测试仪,qq(tcsh-c“gpath$dir/$tsttgt;bin/rununittests 2>&1”|) 尝试将句柄2(stderr)重定向到句柄1(stdout),如下所示 打开单元测试仪,qq(tcsh-c“gpath$dir/$tsttgt;bin/rununittests 2>&1”|) 想到两个选项(至少):有没有办法让这个perl代码从tcsh中捕获stderr和stdout?,perl,tcsh,Perl,Tcsh,我还阅读了关于perl常见问题的讨论,但这与bash有关:尝试将句柄2(stderr)重定向到句柄1(stdout),如下所示 打开单元测试仪,qq(tcsh-c“gpath$dir/$tsttgt;bin/rununittests 2>&1”|) 尝试将句柄2(stderr)重定向到句柄1(stdout),如下所示 打开单元测试仪,qq(tcsh-c“gpath$dir/$tsttgt;bin/rununittests 2>&1”|) 想到两个选项(至少): open UNIT_TESTER,
open UNIT_TESTER, qq(tcsh -c "gpath $dir/$tsttgt; bin/rununittests >& "|);
及
第二种是欺骗;它使用Bourne/Korn/POSIX/Bash shell表示法。请注意,除非您小心,否则最终只会出现第二个命令的错误输出,而不会出现第一个命令的错误输出。想到两个选项(至少):
open UNIT_TESTER, qq(tcsh -c "gpath $dir/$tsttgt; bin/rununittests >& "|);
及
第二种是欺骗;它使用Bourne/Korn/POSIX/Bash shell表示法。请注意,除非您非常小心,否则最终只会出现第二个命令的错误输出,而不会出现第一个命令的错误输出。多亏了BillThor,我偶然发现了一个解决方案:
open UNIT_TESTER, qq(sh -c "{ gpath $dir/$tsttgt; bin/rununittests; } 2>&1"|);
多亏了BillThor,我偶然发现了一个解决方案:
open UNIT_TESTER, qq(sh -c "{ gpath $dir/$tsttgt; bin/rununittests; } 2>&1"|);
我建议您使用CPAN的模块进行捕获。它小巧、简单,而且经过了很好的测试。它有一个优雅的API,如果你完全没有任何依赖性,它可以很容易地嵌入到你的程序中 除此之外:如果您对正在运行的测试程序有任何控制权,我建议您调查。如果您可以使测试程序输出点击,那么您的用例(包括测试的良好摘要)将变得简单如下:
open UNIT_TESTER, qq(tcsh -c "gpath $dir/$tsttgt; bin/rununittests |& cat "|);
注意:关于第二段:可能最近的测试::需要线束。另外,它并不能完全满足您对shell调用的需求,但它应该可以让您离得足够近。我建议您使用CPAN中的模块进行捕获。它小巧、简单,而且经过了很好的测试。它有一个优雅的API,如果你完全没有任何依赖性,它可以很容易地嵌入到你的程序中 除此之外:如果您对正在运行的测试程序有任何控制权,我建议您调查。如果您可以使测试程序输出点击,那么您的用例(包括测试的良好摘要)将变得简单如下:
open UNIT_TESTER, qq(tcsh -c "gpath $dir/$tsttgt; bin/rununittests |& cat "|);
注意:关于第二段:可能最近的测试::需要线束。另外,它并不能完全满足您对shell调用的需求,但它应该可以让您更接近它。这是Bourne/Korn/POSIX/Bash shell表示法;不是“tcsh”,除非它经过了认真的改造。这是Bourne/Korn/POSIX/bashshell符号;不是“tcsh”,除非它经过了严重的改造。@mikelong:如果你认为它一定是tcsh,那么你需要被派去寻找。另外,您可以小心地使用:
qq(tcsh-c“sh-c'{…}2>&1'”|
,它使用tcsh
来运行sh
来捕获输出。如果您很小心,您也可以在其中使用“exec”。@mikelong:如果您认为它一定是tcsh,那么您需要被派去寻找。另外,您可以小心地使用:qq(tcsh-c)“sh-c'{…}2>&1'”|
它使用tcsh
来运行sh
来捕获输出。如果你小心的话,你也可以在那里使用“exec”。不,它不需要,但我实际上只需要第二个命令的输出。不,它不需要,但我实际上只需要第二个命令的输出。