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