3

我想从 python 脚本设置为 clearcase 视图,然后在该视图中执行命令。我尝试使用此处列出的各种方法:

子进程

但我没有任何成功。有谁知道如何做到这一点?

4

2 回答 2

4

我不建议设置视图,因为setview它本身会产生一个新进程。
我真的更喜欢/view/viewTag/aVob/...启动视图后使用( cleartool startview viewTag)

在我看来,“生成过程”问题让所有事情都变得过于复杂,并解释了为什么你有这样的技术说明:

执行后出现的任何命令cleartool setview cmview都不会被处理,因为 shell 是用 生成的exec(),它将当前程序替换为新程序。

这意味着当前进程的文本和代码段,在这种情况下是包含所有命令的脚本,被正在执行的程序所取代,这是由 running 调用的 shell cleartool setview cmview
因此,任何命令都不会在setview.

-exec变量将启动一个子shell 进程并在指定的动态视图中调用指定的命令。一旦命令完成,控制权就会返回给父 shell。不会在父 shell 进程中设置
视图-exec
生成的-exec子shell会继承父shell进程的环境变量;但是,在子 shell 中创建的环境变量不会传递回父 shell。

所以如果你真的想使用setview,你可以(我自己没有直接测试过):

  • 有一个 python 脚本调用setview
  • 但是该setview调用的参数将是另一个python脚本(当配置了所述设置视图的内容-exec时,执行您想要执行的操作。/vobs
于 2012-04-20T19:47:21.157 回答
3

旧线程,但我只需要解决这个问题,所以也许有帮助。

在你的 python 脚本中

process = subprocess.Popen('usr/atria/bin/cleartool setview viewName')
(out, err) = process.communicate('python script2Name')

.communicate 可以传递新命令,就好像你将它传递给一个新的外壳(终端)一样。

另一种方法是

process = subprocess.Popen('usr/atria/bin/cleartool setview -exec "whatever command you want inside view" viewName')
(out, err) = process.communicate()
于 2017-08-30T12:04:07.980 回答