Laz*_*zer 22 perl command system
$ cat test.pl
my $pid = 5892;
my $not = system("top -H -p $pid -n 1 | grep myprocess | wc -l");
print "not = $not\n";
$ perl test.pl
11
not = 0
$
Run Code Online (Sandbox Code Playgroud)
我想将结果捕获11到变量中.我怎样才能做到这一点?
Nik*_*ain 50
来自Perlfaq8:
你混淆了system()和反引号(``)的目的.system()运行命令并返回退出状态信息(作为16位值:低7位是进程死亡的信号,如果有的话,高8位是实际退出值).反引号(``)运行命令并返回它发送给STDOUT的内容.
$exit_status = system("mail-users");
$output_string = `ls`;
Run Code Online (Sandbox Code Playgroud)
有许多方法可以从Perl执行外部命令.最常见的含义是:
另请参阅如何从外部命令捕获STDERR?
Pet*_*ans 11
最简单的方法是使用``Perl中的功能.这将执行内部的内容并返回打印到stdout的内容:
my $pid = 5892;
my $var = `top -H -p $pid -n 1 | grep myprocess | wc -l`;
print "not = $var\n";
Run Code Online (Sandbox Code Playgroud)
这应该做到这一点.
小智 7
尝试使用qx{command}而不是反引号.对我来说,它更好一点,因为:你可以用它做SQL,而不用担心转义引号等.根据编辑器和屏幕的不同,我的老眼睛往往会错过微小的背蜱,并且不应该像使用尖括号而不是全局那样过载.