2016-08-15 2 views
0

잘 작동 :파이썬 스크립트 - 단자를 통해 인쇄 명령은이 코드를 사용하여 파이썬에서 아카이브를 만드는거야

#Creates archive using string like [proxy_16-08-15_08.57.07.tar] 
proxyArchiveLabel = 'proxy_%s' % EXECUTION_START_TIME + '.tar' 
log.info('Packaging %s ...' % proxyArchiveLabel) 

#Removes .tar from label during creation 
shutil.make_archive(proxyArchiveLabel.rsplit('.',1)[0], 'tar', verbose=True) 

그래서 이것은 로컬 디렉토리에서 아카이브 벌금을 만듭니다. 문제는 크기가 작고이 작업이 불필요하기 때문에 제거하려는 아카이브에 특정 디렉토리가 있다는 것입니다.

ExecWithLogging('tar -vf %s --delete ./roles/jobs/*' % proxyArchiveLabel) 
# ------------ 
def ExecWithLogging(cmd): 
    print cmd 
    p = subprocess.Popen(cmd.split(' '), env=os.environ, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
    while(True): 
     log.info(p.stdout.readline().strip()) 
     if(p.poll() is not None): 
     break 

그러나 이것은 기본적으로 아무것도하지 않는 것처럼 보입니다. 크기는 동일하게 유지됩니다. ExecWithLogging 안에 cmd을 인쇄하고 스크립트의 작업 디렉토리에있는 터미널에 해당 명령을 복사/실행하면 정상적으로 작동합니다. 확실하게, 나는 또한 tar -vf %s --delete 명령의 일부로 아카이브가 생성 된 전체 경로를 하드 코딩했으나 아무 일도 일어나지 않았다.

내 INFO 로그에 다음과 같은 결과가 표시됩니다. tar: Pattern matching characters used in file names입니다. 따라서 Popen은 내 명령을 잘못 해석하고 있습니다. (오히려 잘못 입력했을 가능성이 큽니다.)

내가 잘못 했나요? 그 밖의 무엇을 시도 할 수 있습니까?

답변

2

tar 명령에서 --wildcards 옵션을 사용해야 할 수도 있습니다. 그러면 패턴 일치가 가능해집니다. 이것은 당신이 당신의 로그에서보고있는 것일 수 있습니다.

편집 : 왜 귀하의 질문에 대한 답변입니까? 나는 Popen을 통해 제안 된 명령이 그렇지 않은 동안 쉘이 와일드 카드 확장을 수행하고 있다고 의심합니다. tar에 대한 --wildcard 옵션은 tar에 와일드 카드 확장을 수행하도록합니다. 더 자세한 설명은
는 여기를 참조하십시오
Tar and wildcards

+0

아름 다운, 이것이 바로 그것을 밖으로 고정. 터미널이 신경 쓰지 않는 이유에 관심이 많았지 만,'Popen'을 통해 지나쳤습니다. – MrDuk