2013-08-26 16 views
2

我正在創建一個Perl腳本,其中包括設置到ClearCase視圖,源代碼環境,運行綜合工具,處理輸出報告。它通過管道系統打開使用IPC::open2打開的外殼程序。在使用Perl IPC打開的shell進程中不能'cleartool setview':: open2

如果我在運行Perl腳本之前手動設置視圖,它似乎可以正常工作(cleartool子命令,例如pwv工作)。然而,當我在腳本運行$ct setview anassar_$proj,它提供了以下錯誤信息:

stty: standard input: Invalid argument 

我不知道的,禁止其通過管道傳輸到一個shell進程中運行ct setview任何約束。任何幫助?

my ($readme, $writeme); 
# Open the default shell and hook to its stdin and stdout. 
my $pid = open2($readme, $writeme, "$ENV{SHELL}") or 
    croak "Cannot open IPC handles to $ENV{SHELL}\n"; 


runCmd("$ct pwv"); 
runCmd("$ct setview anassar_$proj"); 
runCmd("$ct pwv"); 
runCmd('source /vobs/blah/blah/blah/env.csh'); 
runCmd('echo env_var1 = $env_var1'); 
runCmd('echo env_var2 = $env_var2'); 
runCmd('echo env_var3 = $env_var3'); 
runCmd('exit'); # Exit from ClearCase View 
runCmd('exit'); # Exit from shell. 


sub runCmd { 
    my ($cmd) = @_; 
    my $sentinel = '___SOME_STRING_THAT_CANNOT_OCCUR_IN_OUTPUT___'; 

    print $writeme "$cmd && echo $sentinel\n"; 

    while (my $output = <$readme>) { 
     last if ($output =~ /$sentinel/); 
     print $output; 
    } 
} 
+0

我發現[這個答案](http://stackoverflow.com/questions/10252436/python-and-clearcase-setview)到一個類似的問題。我嘗試使用'startview'並使用路徑'/ view/tagname/vobs/blah/blah/blah/env.csh'引用環境腳本,但環境腳本本身(不受我控制)是直接使用'/ vobs'層次結構(即需要'setview')。 我現在知道的唯一解決方案是使用: 'ct setview -exec「myscript」tagname' –

+0

我會建議你一件事,儘管它可能不可能。儘快離開ClearCase。我也在用Perl + cleartool解決一個問題。在我的情況下,它是如何通過啓動cleartool更新的perl腳本將'CTRL + C'信號傳遞給cleartool。這是不可能的(在Windows上)。 –

+0

@RenéKolařík:坦率地說,作爲一名數字VLSI設計師(而不是IT基礎架構專家),我偶爾會遇到這種麻煩。 IT部門仍然負擔重任。我只爲我的團隊做了本地定製。所以從用戶的角度來看(我以前只使用過CVS和SVN的用戶),我覺得ClearCase結構良好,可以控制和跟蹤大型項目(我正在從事涉及1000名設計師和10多名團隊的非常大的項目)。 也許,我需要接觸到其他系統來實現你在說什麼。 –

回答

1

正如我在你看到了「Python and ClearCase setview」的答案,在腳本中使用setview提的是通常不是一個好主意。

我知道是唯一的解決辦法二等於2個腳本:

  • 其中一個保證的setView完成,並/vobs/xxx爲右側VOB在右視圖
  • 一個將使用/vobs

試圖在一個步驟中完成所有操作都會失敗,因爲setview會啓動子shell。

+1

謝謝,VonC。我猜命令'ct setview -exec「myscript.pl」tagname「應該等同於你的雙腳本解決方案。對?我只想限制所有功能到一個腳本並將一個命令傳遞給crontab文件? –

+0

@AhmedNassar我想這是:讓我知道這是否有效,我會將它添加到答案。 – VonC

相關問題