如何检查使用 Paramiko exec_command 创建的文件是否存在
How to check if the created file using Paramiko exec_command exists
我正在尝试打开一个作为 Paramiko exec_command
的一部分创建的文件。文件已创建,但当我检查文件是否存在时,它总是 returns false。如何检查文件是否存在,然后打开文件进行读取?
写的代码是:
ip = '10.30.2.104'
username = 'root'
password = 'docker'
def checkSSH(ip, username, password, retries=1):
ssh = SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.load_system_host_keys()
for x in range(retries):
try:
ssh.connect(ip, username=username, password=password, timeout=10)
return ssh
except (
paramiko.BadHostKeyException, paramiko.AuthenticationException, paramiko.SSHException, socket.error) as e:
print('Exception occured.. {0}'.format(e))
return False
hdl = checkSSH(ip, username, password)
cmd = 'ls > test.log'
hdl.exec_command(cmd)
a = os.path.exists('/root/test.log')
print(a) >>> if the file exists, this returns true as per the documentation but in this case, it always returns false.
首先,您不是在等待命令完成。
请参阅:
Wait to finish command executed with Python Paramiko
命令完成后,您可以使用 Channel.recv_exit_status()
:
检索其退出代码
How can you get the SSH return code using Paramiko?
如果它 returns 0,您就知道一切正常,不需要额外检查。
无论如何,如果要检查,请使用 SFTP (SFTPClient.stat
):
sftp = hdl.open_sftp()
try:
sftp.stat('/root/test.log')
print("exists")
except Exception as e:
print("something is wrong: " + e)
尽管ls
命令的执行对我来说似乎很奇怪。
如果要检索目录列表,请使用 SFTP:SFTPClient.listdir_attr
我正在尝试打开一个作为 Paramiko exec_command
的一部分创建的文件。文件已创建,但当我检查文件是否存在时,它总是 returns false。如何检查文件是否存在,然后打开文件进行读取?
写的代码是:
ip = '10.30.2.104'
username = 'root'
password = 'docker'
def checkSSH(ip, username, password, retries=1):
ssh = SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.load_system_host_keys()
for x in range(retries):
try:
ssh.connect(ip, username=username, password=password, timeout=10)
return ssh
except (
paramiko.BadHostKeyException, paramiko.AuthenticationException, paramiko.SSHException, socket.error) as e:
print('Exception occured.. {0}'.format(e))
return False
hdl = checkSSH(ip, username, password)
cmd = 'ls > test.log'
hdl.exec_command(cmd)
a = os.path.exists('/root/test.log')
print(a) >>> if the file exists, this returns true as per the documentation but in this case, it always returns false.
首先,您不是在等待命令完成。
请参阅:
Wait to finish command executed with Python Paramiko
命令完成后,您可以使用 Channel.recv_exit_status()
:
检索其退出代码
How can you get the SSH return code using Paramiko?
如果它 returns 0,您就知道一切正常,不需要额外检查。
无论如何,如果要检查,请使用 SFTP (SFTPClient.stat
):
sftp = hdl.open_sftp()
try:
sftp.stat('/root/test.log')
print("exists")
except Exception as e:
print("something is wrong: " + e)
尽管ls
命令的执行对我来说似乎很奇怪。
如果要检索目录列表,请使用 SFTP:SFTPClient.listdir_attr