在任务之间暂停python脚本,等待用户继续。

时间:2014-07-07 15:49:06

标签: python remote-access file-management

我正在寻找一个脚本,它会在远程服务器上为我分组一些文件,这样我就可以用一个“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)

**然后在我本地计算机的终端上,我从远程服务器scp'move_files'中的所有文件

**然后我通过ssh返回远程服务器并清空该目录

为了澄清我想在脚本中添加一些内容,使其在复制文件后等待,给我一个信号,表明它已经复制了它们。然后我可以scp并恢复我的脚本,它将返回并删除它之前复制的文件。

2 个答案:

答案 0 :(得分:2)

一种简单的方法是等待用户的输入:

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

try / except是因为如果你只使用input函数按Enter键,它会返回一个SyntaxError,因为它需要一些输入而你没有给它。但我们不需要输入,只是一个你准备继续的信号。

如果您使用的是较旧版本的Python,则可以使用raw_input代替input

答案 1 :(得分: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()