1
我想通过IPC :: Run从perl执行一个git命令,它从perl变量中获取git的STDOUT/STDERR-Output。从git捕捉STDOUT/STDERR
这里是我做的:
use strict;
use warnings;
use IPC::Run;
my $stderr, $stdout, @cmd;
push @cmd, "git";
push @cmd, "clone";
push @cmd, "http://my.gitserver.com/scm/tst2/abc.git";
my $success = IPC::Run::run \@cmd, '>', \$stdout, '2>', \$stderr;
1;
运行,这导致:
- $标准输出:克隆到 'ABC' ...
- $标准错误:空
从命令行直接运行git命令会导致以下输出:
$ git clone http://my.gitserver.com/scm/tst2/abc.git
Cloning into 'abc'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
正如你所看到的,产生的git命令行上多一些输出比我其实我的Perl实现内拍摄。
怎么回事?
输出你检查$ STDERR变量?另外,当我必须从perl管理GIT仓库时,我使用Git :: Repository模块。 – 2013-04-30 11:50:08
额外的输出可能仅在STDOUT连接到终端时提供。如果是这样,提供一个伪TTY可能应该说服'git'输出它。请注意,它肯定会包含许多终端控制字符(回车符和退格符)。 – ikegami 2013-04-30 11:58:05
@ miguel-prz:正如我所说的,在我的调用之后,$ stderr是空的......使用'Git :: Repository'模块在我的情况下不容易使用(因为我的“服务器”从命令执行的命令远程机器,并将结果写入共享沙箱 - 接收到的命令可以是“任何东西” - 不仅git命令... @ikegami:不知道如何做到这一点... – hoppfrosch 2013-04-30 13:05:07