Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法让这个perl代码从tcsh中捕获stderr和stdout?_Perl_Tcsh - Fatal编程技术网

有没有办法让这个perl代码从tcsh中捕获stderr和stdout?

有没有办法让这个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,

我还阅读了关于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, 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”。不,它不需要,但我实际上只需要第二个命令的输出。不,它不需要,但我实际上只需要第二个命令的输出。