关于python:Paramiko / SCP-检查文件是否在远程主机上

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