2017-01-23 11 views
0

У меня есть команда интерфейса командной строки, которые исполняются с помощью командной строки Windows. Есть несколько команд, которые я использовал для извлечения файлы из репозитория CVS с помощью командной строки. Теперь я хочу выполнить эти команды с помощью скрипта python. Я выяснил, что мне нужно использовать подпроцесс inorder для взаимодействия с командной строкой с помощью скрипта python. Я пытаюсь запустить часть кода ниже для извлечения файлов из репозитория CVS с помощью HEAD. Когда я пытаюсь выполнить эти команды непосредственно из командной строки, они выполняются правильно. Я вижу, что он создает локальную рабочую область, и он правильно извлекает файлы. Но когда я выполняю python, он не выполняет никаких действий. Мне нужна ваша помощь. Я также хочу получать файлы с помощью тега.Извлечение файлов из репозитория CVS путем выполнения строки команд Windows из сценария python на основе ввода, указанного пользователем

import os 
import sys 
import subprocess 

Current_Working_Directory=os.getcwd() 
print "Current_Working_Directory",Current_Working_Directory 

cmd = ['cvs', 
    '-d:::pserver:<username>@<computername>:<repository> 
    'login'] 
p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
output=p.communicate() 
print "p",p 
cmd1=['set','CVSROOT','=','pserver:<username>@<computername>:<repository>'] 
p1 = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
print p1 
cmd2=['cvs','co','-r','HEAD','Test'] 
p2 = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
print p2 

ответ

0

Выполнение subprocess.Popen создает новый подпроцесс. Переменная envioronment CVSROOT будет существовать только для краткого существования этого подпроцесса, поэтому она не будет использоваться для следующего Popen, который выполняет команду cvs. Вместо этого вы хотите сделать os.environ["CVSROOT"] = 'pserver:<username>@<computername>:<repository>'.

Фактически, если вы делаете это до cvs login, вам не нужно указывать его явно в этой команде.

Альтернатива - указать cvsroot с -d в команде cvs co, как вы это делали с командой cvs login.

+0

На самом деле, если я пытаюсь запустить код выше. Он не извлекает файлы из репозитория CVS, тогда как если он пытается запустить эти команды в командной строке, файлы извлекаются правильно, и я могу видеть эти файлы в своей локальной рабочей области. Как я могу получить файлы с помощью скрипта python? – user1681102

+0

Что вы сделали для отладки проблемы? Какой результат дает CVS? – Mort

+0

Теперь я изменил свой подход. Вместо выполнения интерфейсов командной строки непосредственно с помощью скрипта python. Я создал командный файл, который имеет все команды, которые извлекают файлы из репозитория CVS, и я пытаюсь вызвать этот файл bat из моего сценария python. Это работал на меня !! – user1681102