Paramiko / scp - check if file exists on remote host
我正在使用Python Paramiko和scp在远程计算机上执行一些操作。 我使用的某些计算机要求文件在其系统上本地可用。 在这种情况下,我正在使用Paramiko和scp复制文件。 例如:
1 2 3 4 5 6 7 8 9 10 11 12 | from paramiko import SSHClient from scp import SCPClient ssh = SSHClient() ssh.load_system_host_keys() ssh.connect('192.168.100.1') scp = SCPClient(ssh.get_transport()) scp.put('localfile', 'remote file') scp.close() ssh.close() |
我的问题是,在尝试使用scp之前,如何检查远程计算机上是否存在" localfile"?
我想尝试并在可能的地方使用Python命令,即不要bash
请改用paramiko的SFTP客户端。 此示例程序在复制之前检查是否存在。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #!/usr/bin/env python import paramiko import getpass # make a local test file open('deleteme.txt', 'w').write('you really should delete this]n') ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: ssh.connect('localhost', username=getpass.getuser(), password=getpass.getpass('password: ')) sftp = ssh.open_sftp() sftp.chdir("/tmp/") try: print(sftp.stat('/tmp/deleteme.txt')) print('file exists') except IOError: print('copying file') sftp.put('deleteme.txt', '/tmp/deleteme.txt') ssh.close() except paramiko.SSHException: print("Connection Error") |
应该仅可以结合使用paramiko和'test'命令来检查文件是否存在。 这不需要SFTP支持:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | from paramiko import SSHClient ip = '127.0.0.1' file_to_check = '/tmp/some_file.txt' ssh = SSHClient() ssh.load_system_host_keys() ssh.connect(ip) stdin, stdout, stderr = ssh.exec_command('test -e {0} && echo exists'.format(file_to_check)) errs = stderr.read() if errs: raise Exception('Failed to check existence of {0}: {1}'.format(file_to_check, errs)) file_exits = stdout.read().strip() == 'exists' print file_exits |