标签: qx

如何模拟Perl的内置反引号运算符?

我想对使用反引号的我的Perl程序进行单元测试.有没有办法模拟反引号,以便他们可以做一些与执行外部命令不同的东西?

另一个问题显示了我需要的东西,但是在Ruby中.不幸的是,我不能选择在这个项目中使用Ruby,也不想避免反引号.

perl unit-testing backticks qx

11
推荐指数
1
解决办法
1383
查看次数

如果我使用backtics调用它,如何将curl的输出转换为Perl中的变量?

我试图将curl调用的响应转换为perl中的变量.

my $foo = `curl yadd yadda`;

print $foo;
Run Code Online (Sandbox Code Playgroud)

不起作用.当我在命令行运行它时,curl调用在终端中正确打印其所有输出,但该变量未填充该数据.

有没有办法在不安装和调用Perl curl lib的情况下执行此操作?

perl curl backticks qx

8
推荐指数
2
解决办法
2万
查看次数

使用perl的qx {} /`...`运算符和参数列表

system,exec,open '|-',open2,等方面都让我来指定作为将直接传递到参数列表运行命令execvp通过一个外壳,而不是运行.

即使perl它足够聪明,如果它看起来像一个"简单"的命令,它可以直接运行它,这样可以省去正确的shell转义所带来的所有令人讨厌的陷阱的麻烦.

例:

open my $out, '|-', $prog, @args;
system $prog, @args;
exec $prog, @args;
Run Code Online (Sandbox Code Playgroud)

代替

open my $out, "|$prog @args";
system "$prog @args";
exec "$prog @args";
Run Code Online (Sandbox Code Playgroud)

qx//运营商是否有这样的等价物?或者你必须总是手工完成,例如.

sub slurpcmd {
   open my $h, '-|', @_ or die "open $_[0]|: $!";
   local $/ unless wantarray;
   <$h>
}
Run Code Online (Sandbox Code Playgroud)

perl backticks qx

5
推荐指数
3
解决办法
202
查看次数

fork in perl但从子进程中的系统调用中获取退出状态

我所做的:

  1. 对cgi脚本进行ajax调用.
  2. Cgi脚本分叉,但父母立即返回响应消息.
  3. 子进行系统调用但需要退出代码和任何错误消息.

伪代码:

$SIG{CHLD} = ‘IGNORE’; # or waitpid($pid,0) in the parent process
$pid = fork();
if($pid == 0)
{
    close STDOUT; # So that the parent sends the response to the client right away.

    @errorMsgs = qx(tar up big directories over 50G…); # This can go on for a few minutes.

    if($? ==0) { Send a ‘success’ email } # Is always false ($? == -1)

    else { Send a ‘failure’ email }
}
elsif($pid){ sendResponse; waitpid($pid,0) …
Run Code Online (Sandbox Code Playgroud)

ajax perl fork exit qx

3
推荐指数
1
解决办法
1593
查看次数

如何在qx中使用__FILE__?

我试图在Perl脚本的顶部分配一个常量,如下所示:

use constant {
  # ...
  CONSTNAME => qx{readlink -e __FILE__} || __FILE__,
  # ...
};
Run Code Online (Sandbox Code Playgroud)

__FILE__不会在qx运算符内插入,这会导致失败.我怎样才能实现我想要的,即__FILE__ 调用readlinkshell 之前插入.

请注意:不能将命令存储在中间变量中.

perl qx

3
推荐指数
1
解决办法
704
查看次数

如何实现qx(命令)的超时?

如何在这段代码中实现超时:如果"hwinfo --usb"命令在一段时间后没有返回任何内容,(停止命令并且)从子_usb_device返回或死掉.

#!/usr/bin/env perl
use warnings; 
use strict;


sub _usb_device {
    my @array;
    {
    local $/ = "";
    @array = qx( hwinfo --usb );
    }
    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

perl timeout qx

1
推荐指数
1
解决办法
1205
查看次数

是否可以在qx内调用函数?

这里有一些Perl代码可以满足我的需求:

 my $value  = get_value();
 my $result = qx(some-shell-command $value);

 sub get_value {
   ...
   return ...
 }
Run Code Online (Sandbox Code Playgroud)

没有使用可以达到相同的效果$value吗?就像是

my $result = qx (some-shell-command . ' '. get_value());
Run Code Online (Sandbox Code Playgroud)

我知道为什么第二种方法不起作用,只是为了证明这个想法.

perl qx

1
推荐指数
1
解决办法
144
查看次数

标签 统计

perl ×7

qx ×7

backticks ×3

ajax ×1

curl ×1

exit ×1

fork ×1

timeout ×1

unit-testing ×1