한 서버에서 다른 서버로 이미지를 복사하기 위해 python 스크립트의 하위 프로세스에서 ssh를 통해 rsync를 실행하려고합니다.python subprocess.call에서 rsync 호출
rsync -avz --include='*/' --include='*.jpg' --exclude='*' -e ssh /shared/books/{book_482,book_347} [email protected]:/home/jill/web/public/static/
그리고 실제로 내 인쇄 문 출력 :
def rsyncBookContent(bookIds, serverEnv):
bookPaths = ""
if len(bookIds) > 1:
bookPaths = "{" + ",".join(("book_"+str(x)) for x in bookIds) + "}"
else:
bookPaths = "book_" + str(bookIds[0])
for host in serverEnv['content.hosts']:
args = ["rsync", "-avz", "--include='*/'", "--include='*.jpg'", "--exclude='*'", "-e", "ssh", options.bookDestDir + "/" + bookPaths, "[email protected]" + host + ":/home/jill/web/public/static/"]
print "executing " + ' '.join(args)
subprocess.call(args)
내가 궁극적으로 할 노력하고있어 것은 파이썬 (bash 쉘에서 작동하는)이 실행이 있습니다 : 나는이 함수를 정의했습니다 :
executing rsync -avz --include='*/' --include='*.jpg' --exclude='*' -e ssh /shared/books/{book_482,book_347} [email protected]:/home/jill/web/public/static/
하지만이 파이썬 스크립트 내에서 실행될 때,이 두 가지 문제 :
- len (bookIds)> 1 인 경우/shared/books/아래의 하위 디렉토리 목록이 bash 또는 rsync에 의해 잘못 해석됩니다. 오류 메시지가 없습니다 :
- rsync에서는 실패 link_stat "/ 공유/책/{book_482, book_347}": 그런 파일이나 디렉토리 (2))
- 렌 (bookIds) == 1의 경우, 소스 디렉토리 아래에있는 모든 파일은
가 subprocess.call 기능이 일부 문자가 아니, 뭔가를 탈출하거나 할 필요 것처럼 보인다 (내 의도대로, 단지 * .JPG)을 rsynced입니까?
:
뉴 (일) 코드는 다음과 같습니다? 예를 들어,'subprocess.call (args, shell = True)' – sberry