我正在寻找一个脚本,它会在远程服务器上为我分组一些文件,这样我就可以用一个“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并恢复我的脚本,它将返回并删除它之前复制的文件。
答案 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
] 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()