连接到远程服务器并计算文件数的python脚本

连接到远程服务器并计算文件数的python脚本,python,linux,paramiko,Python,Linux,Paramiko,我需要通过Python获取远程服务器中的文件数。在终端中运行的linux命令为我提供了所需的输出,而在Python中执行的linux命令为我提供了[u'0\n']的输出。非常感谢您的帮助 #!/usr/local/bin/python import paramiko client=paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect('hostname',

我需要通过Python获取远程服务器中的文件数。在终端中运行的linux命令为我提供了所需的输出,而在Python中执行的linux命令为我提供了[u'0\n']的输出。非常感谢您的帮助

#!/usr/local/bin/python
import paramiko
client=paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('hostname', username='username')
grepCommand="ssh  username@hostname 'find /usr/local/somefolder1/somefolder2 -type f   -exec ls  {} \;'|wc -l"
stdin,stdout,stderr = client.exec_command(grepCommand)
data=stdout.readlines()
print data
client.close()

因为paramiko库已经为您建立了ssh连接,所以您不需要在远程命令中执行ssh。另外,您似乎正在将输出本地管道传输到
wc
。。有些事情你不能在这里做,因为对于paramiko你没有使用本地shell。因此:

您的
grepCommand
应该与在远程机器上的shell中执行它时的效果完全相同

例如:


因为paramiko库已经为您建立了ssh连接,所以您不需要在远程命令中执行ssh。另外,您似乎正在将输出本地管道传输到
wc
。。有些事情你不能在这里做,因为对于paramiko你没有使用本地shell。因此:

您的
grepCommand
应该与在远程机器上的shell中执行它时的效果完全相同

例如:


它给出了正确的结果,但在unicode中,只需在数据中运行i;print(i.encode('ascii','replace')表示grepCommand的第一部分完全错误,您已经通过paramiko连接到主机,因此再次通过ssh连接是毫无意义的。它提供了正确的结果,但在unicode中,只需为数据中的i运行;print(i.encode('ascii','replace')表示grepCommand的第一部分完全错误,您已经通过paramiko连接到主机,因此通过ssh连接毫无意义再次感谢您,根据建议修改了代码,但现在得到的值为0,而远程服务器中有21个文件。#/usr/local/bin/python import paramiko client=paramiko.SSHClient()client.set_missing_host_key_policy(paramiko.AutoAddPolicy())client.connect('hostname',username='username')grepcomand=“'find/usr/local/somefolder1/somefolder2-type f-exec ls{}\”|wc l“stdin、stdout、stderr=client.exec_命令(grepcand)data=stdout.readlines()对于i-in-data:print(i.encode('ascii','replace'))client.close()以交互方式登录到远程计算机并在那里运行,以测试您正在运行的任何命令。此外,您是否绝对确定您登录的用户对该目录具有rx权限?你的连接成功了吗?检查远程设备上的auth/sshd日志,以确保您正在连接您的命令仍然是结构化的,就好像您有一个远程和本地shell,而您没有。你的命令比需要的复杂得多。。看看我在回答中输入的示例命令,我在终端中重新运行相同的命令,下面是结果[arun@pstools~]$sshusername@hostname'find/usr/local/somefolder1/somefolder2-type f-exec ls{}\;'|wc-l21[arun@pstools~]$python gretl.py 0第二个是python执行结果,第一个是linux命令执行结果。我们非常欣赏,根据建议修改了代码,但现在得到的值是0,而远程服务器中有21个文件。#/usr/local/bin/python import paramiko client=paramiko.SSHClient()client.set_missing_host_key_policy(paramiko.AutoAddPolicy())client.connect('hostname',username='username')grepcomand=“'find/usr/local/somefolder1/somefolder2-type f-exec ls{}\”|wc l“stdin、stdout、stderr=client.exec_命令(grepcand)data=stdout.readlines()对于i-in-data:print(i.encode('ascii','replace'))client.close()以交互方式登录到远程计算机并在那里运行,以测试您正在运行的任何命令。此外,您是否绝对确定您登录的用户对该目录具有rx权限?你的连接成功了吗?检查远程设备上的auth/sshd日志,以确保您正在连接您的命令仍然是结构化的,就好像您有一个远程和本地shell,而您没有。你的命令比需要的复杂得多。。看看我在回答中输入的示例命令,我在终端中重新运行相同的命令,下面是结果[arun@pstools~]$sshusername@hostname'find/usr/local/somefolder1/somefolder2-type f-exec ls{}\;'|wc-l21[arun@pstools~]$python gretl.py 0第二个是python执行结果,而第一个是linux命令执行结果
 find /etc -type f | wc -l