Python ClearCase Скачать Vobs Popen Password BASH Program Sketchy

Я закодировал эту программу вчера, и она действительно работала, за исключением случаев, когда она запускалась CRON. Сегодня я запустил тот же скрипт, и он не работает. Сценарий будет работать без каких-либо ошибок трассировки и скопирует верхнюю папку (vob) из представления ClearCase, но не важные данные в папках и файлах ниже целевой папки.

Вот мой скрипт Python.

def obtainCode(view="My_VIEW", folder="/my_folder"):
    """Download code from ClearCase's File System and put it on the hard-drive"""

    dest = '/etc/foo'
    password = 'passwords'

    v1 = subprocess.Popen(['cleartool', 'setview', view], shell=True, stdout=subprocess.PIPE)
    print "v1 = ", v1
    print "view maybe set :/"

    c1 = subprocess.Popen(['sudo', '-p', '', '-S', 'cp', '-r', folder, dest], stdin=subprocess.PIPE)
    c1.stdin.write(password + '\n')
    c1.stdin.close()
    c1.wait()

    #### Close View and Stop Processes ####
    v2 = subprocess.Popen(['cleartool', 'endview', view], shell=True, stdin=v1.stdout, stdout=subprocess.PIPE)


    v2.kill()
    v1.kill()

Кто-нибудь знает: 1) что идет не так 2) почему вчера это работало, а сегодня нет 3) лучший способ сделать это?

Спасибо за ваше время и внимание.


person user3870315    schedule 07.01.2015    source источник
comment
Я вижу имя переменной folder в местоположении dest, но в этой папке нет фактических данных, которые мне нужны. Это работало вчера, хотя с копированием всех важных вещей под folder.   -  person user3870315    schedule 07.01.2015
comment
Да. Когда я запускаю его из BASH, я нахожусь в представлении ClearCase и запускаю sudo cp -r /my_data /etc/foo, и он рекурсивно копирует все в целевое местоположение. Итак, этот Python работает в вашей системе? Интересно, не перепутал ли я свои переменные среды ранее, пытаясь настроить CRON.   -  person user3870315    schedule 07.01.2015
comment
Интересный. Спасибо за ваш отзыв.   -  person user3870315    schedule 07.01.2015
comment
Я создал несколько папок в $HOME и попытался скопировать их куда-нибудь еще, используя приведенные выше команды в интерактивной оболочке Python, но получил эту ошибку трассировки: IOError: [Errno 32] Broken pipe:/   -  person user3870315    schedule 07.01.2015
comment
Я думаю, что могу попробовать модуль shutil и посмотреть, получу ли я лучшие результаты. Пожалуйста, смотрите мои обновления выше. Проблема может заключаться во взаимодействии с ClearCase. Я думаю, это потому, что я создал несколько папок на своем рабочем столе и сделал скрипт для их копирования в системную папку, и это сработало, поэтому я больше не думаю, что это проблема.   -  person user3870315    schedule 07.01.2015


Ответы (1)


Попробуйте не использовать setview.
Вам это не нужно, вместо этого вы можете использовать полный путь к представлению.

cleartool startview yourDynamicView
cd /view/yourDynamicView/vobs/yourVob

Ранее я упоминал об опасности использования setview ("Python и ClearCase setview").
Он создает подпроцесс внутри ваш подпроцесс, который здесь не нужен.

person VonC    schedule 07.01.2015
comment
Должен ли я жестко кодировать динамическое представление? Я не знаю полного пути просмотра. - person user3870315; 07.01.2015
comment
@ user3870315 жесткое кодирование не требуется. Если вы знаете имя своего динамического представления, вы можете построить полный путь к этому представлению. сетвью не нужен. - person VonC; 07.01.2015
comment
Спасибо вам за помощь. Кажется, я нашел полный путь к представлению. Я собираюсь поэкспериментировать с этим, написав код и посмотрев, работает ли это. Еще раз спасибо. :D - person user3870315; 07.01.2015
comment
Я заметил, что все представления находятся в каталоге /view. Имея это в виду, зачем мне использовать команду startview? - person user3870315; 07.01.2015
comment
@user3870315 user3870315 вам действительно не нужно использовать setview. - person VonC; 07.01.2015