Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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变量中?_Perl_Command_System - Fatal编程技术网

如何将系统命令的结果存储在Perl变量中?

如何将系统命令的结果存储在Perl变量中?,perl,command,system,Perl,Command,System,我想将结果,即11捕获到一个变量中。我该怎么做呢?最简单的方法是在Perl中使用`特性。这将执行内部内容并返回打印到标准输出的内容: $ 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 $ 这样就可以了。来自: 您混淆了和(``)的目的。system()运行命令

我想将结果,即
11
捕获到一个变量中。我该怎么做呢?

最简单的方法是在Perl中使用
`
特性。这将执行内部内容并返回打印到标准输出的内容:

$ 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
$
这样就可以了。

来自:

您混淆了和(``)的目的。system()运行命令并返回退出状态信息(作为16位值:低7位是进程终止的信号(如果有),高8位是实际退出值)。Backticks(``)运行一个命令并返回它发送给STDOUT的内容

 my $pid = 5892;
 my $var = `top -H -p $pid -n 1 | grep myprocess | wc -l`;
 print "not = $var\n";
有许多方法可以从Perl执行外部命令。最常见的含义是:

  • :您希望执行命令,但不希望捕获其输出
  • :您不想返回到 调用perl脚本
  • :您想要捕获 命令的输出
  • 您希望通过管道传输命令(如所示) 输入或输出)到脚本中

另请参见

尝试使用
qx{command}
而不是反勾号。对我来说,它更好一点,因为:您可以使用它执行SQL,而不必担心转义引号之类的问题。根据编辑器和屏幕的不同,我的老眼睛往往会错过微小的背面标记,而且它不应该有过载的问题,比如使用尖括号和glob。

使用
背面标记
qx
帮助,谢谢大家的回答。但是,我发现如果使用
backtick
qx
,则输出包含尾随的换行符,我需要删除它。所以我用了
chomp

$exit_status   = system("mail-users");
$output_string = `ls`;
更多信息请点击此处:
对系统命令使用backticks,这有助于将结果存储到Perl变量中

chomp($host = `hostname`);
chomp($domain = `domainname`);
$fqdn = $host.".".$domain;
此外,例如,您可以使用:

使用IPC::运行qw(运行);
my$pid=5892;
运行[qw(顶部-H-n 1-p),$pid],
“|”,sub{print grep{/myprocess/},
“|”,[qw(wc-l)],
“>”,\my$out;
打印美元;
  • 进程在没有bash子进程的情况下运行
  • 可以通过管道传输到perl subs
  • 与壳牌非常相似

backtics中的$pid替代是一项新功能吗?无法使其与
v5.6.1
配合使用。据我记忆所及,这已起作用。e、 g.试试:
perl-e'$a=“Hello”;打印'echo$a`
也可以看到很好的答案!解决了我的问题!值得注意的是:如果希望在换行符上拆分输出(可能是with
ls
示例中的情况),只需将其分配给“array”变量即可。也就是说,将
$output\u string=`ls`
替换为
@output\u string=`ls`
chomp真是一只奇怪的野兽。。。我不明白,为什么$host=
hostname
$out=chomp($host)不起作用…
chomp
返回修改参数后删除的字符数。您几乎从不关心
chomp
返回的内容。
my $pid = 5892;
my $not = ``top -H -p $pid -n 1 | grep myprocess | wc -l`; 
print "not = $not\n";