저는 파이썬 스크립트를 작성하여 CVS 저장소에 기능을 추가하고 있습니다. Subprocess.Popen 모듈을 사용하여 Cvs 체크 아웃을 실행하는 중입니다.서브 프로세스의 사용. CVS 저장소와 함께 열어 보시겠습니까?
subprocess.Popen('cvs -Q co -r %tag% %directory%')
여기서 태그와 디렉토리는 단지 자리 표시 자일 뿐이며 (스크립트는 사용자 입력을 사용합니다). 내가 CVSROOT를 설정했지만 어떤 이유로 든 체크 아웃 할 스크립트를 원하는 CVS 모듈에 가져올 수 없습니다. 명령 줄에서 직접 동일한 명령 (따옴표)을 실행하면 예상대로 디렉터리가 체크 아웃됩니다.
subprocess.Popen('cvs -Q co -r %tag% %directory%', shell=True)
을하지만 일반적으로 대신
subprocess.Popen(['cvs', '-Q', 'co', '-r', tag, directory])
을하는 것이 좋습니다 : 당신은 쉘에서와 같은 동작을 원하는 경우
, 예를 들어, 디렉토리 이름이 공백 (또는 더 나쁜, 문자가있는 경우 두 번째 방법은 문제에서 당신을 보호한다 like>; |). Windows에서 Popen 구현은 이러한 것을 인용합니다. 리눅스에서는 셸이 무시되므로 문제가되지 않습니다. – greggo
나는 둘 다 시도했지만, 주사위는 아직 없다. 첫 번째 메서드 설정 shell = True는을 반환하고 명령 프롬프트를 열지 않았습니다. 명령을 문자열로 나열하는 두 번째 방법은 명령 프롬프트를 잠시 들었지만 즉시 닫았습니다. 텍스트를 읽을 수 없거나 (오류 메시지가있는 경우) 모듈을 체크 아웃하지 않았습니다. 이것은 이전에 시도했던 것과 같은 결과입니다. –
user2049004
cmd.exe를 열고 거기에 명령을 입력하여 작동하게 할 수 있습니까? – greggo