Python 和 ClearCase setview
- 2025-02-08 08:52:00
- admin 原创
- 48
问题描述:
我想从 python 脚本设置 clearcase 视图,然后在该视图中执行命令。我尝试使用此处概述的各种方法:
子进程
但我没有成功。有人知道如何实现吗?
解决方案 1:
我不建议设置视图,因为setview
它本身会产生一个新进程。我更喜欢在启动视图
后
使用()/view/viewTag/aVob/...
`cleartool startview viewTag`
在我看来,“生成过程”问题使所有事情变得过于复杂,并解释了为什么你有如下技术说明:
“从 shell 脚本设置视图不会处理脚本中的其余命令”。
执行 之后出现的任何命令都
cleartool setview cmview
不会被处理,因为 会生成一个 shellexec()
,它会用新程序替换当前程序。这意味着当前进程的文本和代码段(在本例中是包含所有命令的脚本)被正在执行的程序(即通过运行 调用的 shell)替换
cleartool setview cmview
。因此,在 调用点之后,不会处理任何命令
setview
。
“如何通过发出 setview -exe 或 -login 来处理生成的 shell 以及对子 shell 进程的影响”
变量
-exec
将启动一个子 shell 进程并在指定的动态视图中调用指定的命令。命令完成后,控制权将返回给父 shell。不会
-exec
在父 shell 进程中设置视图。生成的子
-exec
shell 将继承父 shell 进程的环境变量;但是,在子 shell 中创建的环境变量不会传递回父 shell。
因此,如果您确实想使用setview
,您可以(没有亲自测试过):
有一个python脚本调用
setview
但是该
setview
调用将带有一个参数,该参数是另一个 python 脚本(当使用所述设置视图的内容配置-exec
该脚本时,执行您想要执行的操作)。/vobs
解决方案 2:
旧线程,但我刚刚开始处理这个问题,所以也许有帮助。
在你的 Python 脚本中
process = subprocess.Popen('usr/atria/bin/cleartool setview viewName')
(out, err) = process.communicate('python script2Name')
.communicate 可以传递新命令,就像将其传递到新的 shell(终端)一样。
另一种方法是
process = subprocess.Popen('usr/atria/bin/cleartool setview -exec "whatever command you want inside view" viewName')
(out, err) = process.communicate()