2014-07-07 4 views
1

나는 하나의 "scp"명령으로 필요한 것을 다운로드 할 수있는 방법으로 원격 서버에 파일을 그룹화 할 스크립트를 작성하려고한다. 내 파일을 scp하는 동안 스크립트를 일시 중지 할 수있는 방법이 있는지 궁금합니다. 내가 지금까지 가지고있는 것은 일하고있다. 이 스크립트를 하나의 스크립트와 하나의 명령으로 나누는 것이 더 편리 할 것입니다.작업 사이에 파이썬 스크립트를 일시 중지하고 사용자가 계속할 때까지 기다립니다.

** 원격 서버에서 스크립트

for root, dirs, files in os.walk('.'): 
     for f in files: 
       if ('csv') in file.split('.'): 
        cp_str = ''.join(['cp ', file, ' ~/move_files/.']) 
        subprocess.check_output(cp_str, shell=True) 

이 ** 그럼 내 로컬 컴퓨터에서 터미널에서 내가 ** 내 원격 서버

을에서 'move_files'에있는 모든 파일을 scp를 그럼 난 돌아가 ssh를 통해 원격 서버에 연결하고 그 디렉토리를 비우십시오.

명확히하기 위해 스크립트를 복사 한 후 파일을 복사 한 후 파일을 복사 한 신호를주는 무언가를 스크립트에 추가하고 싶습니다. 그런 다음 스크립트를 다시 작성하여 스크립트를 다시 시작하여 이전에 복사 한 파일을 삭제할 수 있습니다.

답변

2

쉬운 방법 중 하나는 사용자의 입력을 기다리는 것입니다 : 그것은 몇 가지 입력을 예상하고 있기 때문에 그냥 input 기능 Enter 키를 누르 경우

try: 
    resume = input("Press Enter to continue.") 
except SyntaxError: 
    pass 

은 try는 /입니다 제외하고, 그것은 구문 에러를 반환하기 때문에 그것을 전혀주지 않았다. 그러나 우리는 입력 할 필요가 없습니다. 계속할 준비가 된 신호입니다.

이전 버전의 Python을 사용하는 경우 input 대신 raw_input을 사용할 수 있습니다.

+0

아! 위대한 당신에게 감사드립니다. 나는 그것을 시도했지만 예외를 허용하지 않았고 구문 오류가 계속 발생했습니다. – Ajay

+0

여러분을 환영합니다! 3 가지 작업을 모두 같은 스크립트에 통합하는 것이 가능한지 궁금합니다. – TheSoundDefense

1

다음 방법은 원격 서버의 약간 수정 된 스크립트와 사용자 PC의 스크립트를 기반으로하지만 로컬 스크립트 만 호출하면됩니다.

은 원격 서버의 스크립트입니다

#!/usr/bin/python 
import sys 
import os 

path = sys.argv[1] 

filelist = "" 
for root, dirs, files in os.walk(path): 
    for f in files: 
     if ('csv') in f.split('.'): 
      filelist = filelist + ", " + os.path.join(root, f) 

print(filelist) 

그리고 이것은 당신이 실제로 사용하는 것과 스크립트입니다. 이 예에서는 paramiko을 사용하여 SSH 연결을 만들고 paramiko sftp 모듈을 사용하여 원격 스크립트에서 찾은 파일을 직접 복사합니다.

필요한 입력은 다음과 같습니다

  • 원격 서버 주소 [server]
  • 원격 사용자 이름 [user]
  • 원격 최상위 폴더가 .CSV 검색 할를 [remote_root]

스크립트 :

#!/usr/bin/python 
import paramiko 
import subprocess 
import os 
import getpass 

server = "your_server" 
user = "username" 

remote_root = raw_input("Path to remote folder to search: ") 

pw = getpass.getpass() 

cwd = os.getcwd() 
ssh = paramiko.SSHClient() 

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 

print("Connecting to {}".format(server)) 

ssh.connect(server, username = user, password = pw) 
print("Executing remote script") 

stdin, stdout, stderr = ssh.exec_command("path_to_your_remote_script") 

print("Copy remote content to current working directory ({})".format(cwd)) 
files = stdout.readlines() 
file_path = [str(x.strip()) for x in files[0].split(",")[1:]] 

sftp = ssh.open_sftp() 
for f in file_path: 
    path, filename = os.path.split(f) 
    sftp.get(f, os.path.join(cwd, filename)) 

sftp.close() 
ssh.close()