相关疑难解决方法(0)

如何在Perl脚本中运行Perl脚本?

我有一个需要执行另一个Perl脚本的Perl脚本.第二个脚本可以直接在命令行上执行,但我需要在第一个程序中执行它.我需要传递一些参数,这些参数通常在它独立运行时传递(第一个脚本定期运行,并在一组系统条件下执行第二个脚本).

Google的初步搜索建议使用反引号或system()调用.有没有其他方法来运行它?(我猜是的,因为它是我们正在讨论的Perl:P)如果我需要从被调用的程序中捕获输出,那么首选哪种方法(如果可能的话,将输出管道输出到stdout,就像第二次一样程序被直接调用)?

(编辑:哦,现在 SO提出了一些相关问题.这个问题很接近,但与我提出的问题并不完全相同.第二个程序可能需要一个小时或更长时间才能运行(大量I/O),所以我不确定一次性调用是否适合这种情况.)

perl ipc

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

从Perl中的输出记录

我有一个程序,它应该运行一组其他程序并收集它们的输出用于记录目的.只要输出标准输出,一切都正常.

这让我想到了两个问题:

  1. 如何在一个文件中捕获两个STDINSTDERR另一个程序?

  2. 如果根本没有输出(或STDERR仅输出),程序将卡在线上:

    while (<$input>)
    
    Run Code Online (Sandbox Code Playgroud)

我怎样才能让程序等待从不确定的运行时另一个程序输出可能的,并且仍然在继续,如果有由程序执行完毕的时间没有输出.

这是代码的那一部分

my $pid = open (my $input, '-|', "$prog $args")
        or push @errors, "A failute has occurred in $prog $args";
if(not @errors){
    while (<$input>){ #POSSIBLE LOCATION FOR HANG UP IF NO PRINTING IS DONE
        if($input =~ /^END\n$/){
            last;
        }
        print $fh $_;
    }
}
else{
    print $fh "An error has occurred with executing \"$prog $args\"";
}
Run Code Online (Sandbox Code Playgroud)

注意:$fh是我的文件处理程序,用于写入我的日志文件,@errors用于在程序中内部报告错误.

编辑:我想在经历了一个问题PROC ::可靠的途径是,它似乎对效果后有STDOUT和 …

parallel-processing perl logging

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

从Perl使用nohup时如何抑制系统输出?

在Perl中,我使用nohup命令启动进程.命令如下:

system("nohup myproc pe88 &");
Run Code Online (Sandbox Code Playgroud)

这工作正常,过程按预期开始.但是,我想抑制此命令的以下输出 - 这是:

Sending output to nohup.out
Run Code Online (Sandbox Code Playgroud)

我必须让这个过程将它的所有输出重定向到nohup.out,但我只是不想在运行我的Perl程序时显示它.我想改为打印我自己的用户友好消息.我尝试过一些变种,但对我来说没有任何效果.

perl

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

从perl中的external*nix命令获取STDOUT,STDERR和响应代码

我想从我的Perl脚本中执行外部命令,将stdout和stderr的输出放入$variable我的选择中,并将命令的退出代码放入$?变量中.

我在perlfaq8和他们的论坛中找到了解决方案,但他们并没有为我工作.奇怪的是,只要退出代码是正确的,我在任何情况下都不会获得sdterr的输出.

我在Red Hat Linux 5上使用Perl版本5.8.8.

这是我正在尝试的一个例子:

my $cmd="less";
my $out=`$cmd 2>&1`;
Run Code Online (Sandbox Code Playgroud)

要么

my $out=qx($cmd 2>&1);
Run Code Online (Sandbox Code Playgroud)

要么

open(PIPE, "$cmd 2>&1|");
Run Code Online (Sandbox Code Playgroud)

当命令成功运行时,我可以捕获stdout.

我不想使用其他捕获模块.如何捕获外部命令的完整结果?

perl stdout stderr

4
推荐指数
3
解决办法
8086
查看次数

如何让 Capture::Tiny 在失败时打印 stderr 和 stdout?

我试图Capture::Tiny在失败时获得命令的输出,

#!/usr/bin/env perl

use strict;
use warnings;
use feature 'say';
use Carp 'confess';
use Capture::Tiny 'capture';

sub execute {
    my $cmd = shift;
    my ($stdout, $stderr, $exit) = capture {
      system( $cmd ); # the script dies here
    };
    if ($exit != 0) { # the script should die here
        say "exit = $exit";
        say "STDOUT = $stdout";
        say "STDERR = $stderr";
        confess "$cmd failed";
    }
    say "STDOUT = $stdout";
    say "STDERR = $stderr";
    say "exit code = …
Run Code Online (Sandbox Code Playgroud)

perl

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

perl open:如何将stderr转发到stdout?

可能的重复:
如何在 Perl 中同时捕获 stderr、stdout 和退出代码?
在通过管道将 STDOUT 传输到文件时捕获 STDERR 的输出

我正在使用以下代码来执行进程:

open( my $proch, "-|", $command, @arguments );
Run Code Online (Sandbox Code Playgroud)

不幸的是,我只会阅读stdout。但我也想阅读 stderr

Stderr 重定向会导致以下错误:

open( my $proch, "2>&1 -|", $command, @arguments );
>>> Unknown open() mode '2>&1 -|' at file.pl line 289
Run Code Online (Sandbox Code Playgroud)

如何将stderr转发到stdout

perl stdout stderr

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

标签 统计

perl ×6

stderr ×2

stdout ×2

ipc ×1

logging ×1

parallel-processing ×1