잘 작동 :파이썬 스크립트 - 단자를 통해 인쇄 명령은이 코드를 사용하여 파이썬에서 아카이브를 만드는거야
#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
은 내 명령을 잘못 해석하고 있습니다. (오히려 잘못 입력했을 가능성이 큽니다.)
내가 잘못 했나요? 그 밖의 무엇을 시도 할 수 있습니까?
아름 다운, 이것이 바로 그것을 밖으로 고정. 터미널이 신경 쓰지 않는 이유에 관심이 많았지 만,'Popen'을 통해 지나쳤습니다. – MrDuk