Python и ClearCase setview
Я хотел бы установить прозрачный вид из скрипта Python, а затем выполнить команды в этом представлении. Я пытался использовать различные методы, изложенные здесь:
но у меня не было никакого успеха. Кто-нибудь знает, как этого добиться?
2 ответа
Я бы не рекомендовал устанавливать вид, потому что setview
сам порождает новый процесс.
Я действительно предпочитаю работать с/view/viewTag/aVob/...
после запуска просмотра (cleartool startview viewTag
)
Проблема "процесса порождения" делает все это слишком сложным, на мой взгляд, и объясняет, почему у вас есть такие замечания, как:
Любые команды, которые появляются после выполнения
cleartool setview cmview
не обрабатываются, потому что оболочка порождаетсяexec()
, который заменяет текущую программу новой программой.Это означает, что текстовые и кодовые сегменты текущего процесса, который в данном случае представляет собой сценарий, содержащий все команды, заменяются выполняемой программой, то есть оболочкой, вызываемой при выполнении
cleartool setview cmview
,
Следовательно, ни одна из команд не обрабатывается за пределами точки вызоваsetview
,
-exec
Переменная запустит процесс подоболочки и вызовет указанную команду в указанном динамическом представлении. Затем управление возвращается родительской оболочке после завершения команды.
-exec
не будет устанавливать представление в родительском процессе оболочки.
-exec
порожденная подоболочка будет наследовать переменные окружения родительского процесса оболочки; однако переменные окружения, созданные в дочерней оболочке, не будут возвращаться в родительскую оболочку.
Так что если вы действительно хотите использовать setview
, вы могли бы (не проверял непосредственно я):
- есть вызов сценария Python
setview
- но это
setview
вызов будет с-exec
параметр является еще одним скриптом Python (делать то, что вы хотите сделать, когда это/vobs
настроен с содержанием указанного набора просмотра.
Старый поток, но я просто должен был работать над этим вопросом, так что, возможно, поможет.
В вашем скрипте Python
process = subprocess.Popen('usr/atria/bin/cleartool setview viewName')
(out, err) = process.communicate('python script2Name')
.communicate могут передаваться новые команды, как если бы вы передавали его новой оболочке (терминалу).