paramiko ls与几个文件输出截断

时间:2017-11-29 17:16:12

标签: python bash python-3.x paramiko ls

我已经成功地使用了paramiko的exec_command和ls,直到我尝试将文件列表作为参数。我的职责是:

def jz_orion_ssh_sout_list(cmd):
    with paramiko.SSHClient() as ssh:
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(orion['host'], username=orion['username'], password=orion['password'])
        ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(cmd)
        sout = ssh_stdout.readlines()
        serr = ssh_stderr.readlines()
        return sout

cmd='ls -l /my/path/file.txt'工作正常时,但cmd='ls -l /my/path/file1.txt file2.txt file3.txt'时,它只返回file1.txt。后面的cmd直接在目标服务器上运行,返回所有3个文件。

如何让它在paramiko中运作?

PS。我发现了另一种在paramiko中有效的语法:cmd='ls -l /my/path/{file1.txt,file2.txt,file3.txt}'但我仍然想知道导致失败的原因是什么。

1 个答案:

答案 0 :(得分:0)

这是您的cmd问题: 例如,我在示例文件夹下有3个文件:

➜ ls example
file1 file2 file4
找不到

file2:

➜ ls -l example/file1 file2
ls: file2: No such file or directory
-rw-r--r--  1 haifzhan  staff  391 28 Nov 10:23 example/file1

ls -l example/file1 file2告诉ls file2在文件夹示例以外的当前目录下。

如果我们只为file1和file2

运行命令
➜ ls -l example/file[1-2]
-rw-r--r--  1 haifzhan  staff  391 28 Nov 10:23 example/file1
-rw-r--r--  1 haifzhan  staff   81 28 Nov 10:26 example/file2

可替换地:

ls -l example/file1 example/file2
-rw-r--r--  1 haifzhan  staff  391 28 Nov 10:23 example/file1
-rw-r--r--  1 haifzhan  staff   81 28 Nov 10:26 example/file2

在你的情况下,ls -l /my/path/{file1.txt,file2.txt,file3.txt}的工作原理是你告诉ls所有文件都在/my/path