使用python子进程和ssh读取远程文件?
import subprocess
ssh = subprocess.Popen(['ssh', '[email protected]', 'cat', 'path/to/file'],
stdout=subprocess.PIPE)
for line in ssh.stdout:
line # do stuff
罗斯,我有完全相同的命令,你建议,但只读第一行,不读其他行。如何让它读取文件中的所有行? – user2921139
我应该说,通过使用上面的你,文件内容是逐字符读取的。我怎样才能完整地读取整行? “split('\ n')”似乎不起作用。 – user2921139
在'ssh.stdout'后面删除'.readline()',你想循环输出而不是第一行。 –
答案上面会工作,但你必须设置你的ssh登录your boxes之间不使用密码。还有其他一些使用Python在计算机之间传输文件的方法。一个简单的方法,没有身份验证是设置一个Apache服务器,并使用http request。
使用iter
与readline
读取每个全线:
for i in iter(f.stdout.readline,"")
对于性能的提高,这是非常重要的文件的时候就大了,有rsync的。有关详细的改进更多信息,请参见下面的帖子,并从拉法答案: How does `scp` differ from `rsync`?
算法然后将下面使用rsync
import subprocess
subprocess.Popen(["rsync", host-ip+'/path/to/file'],stdout=subprocess.PIPE)
for line in ssh.stdout:
line # do stuff
这不起作用。 – Sarien
你要运行用SSH远程服务器上的程序,需要访问文件?你想用SCP将文件复制到你的电脑吗?你希望Python能够直接读取或写入文件吗?您需要提供更多关于您为了回答这个问题而想要做什么的细节。 – agf
在我的程序中,我想列出远程服务器上特定目录下的文件。用户然后选择对这些文件中的一个进行操作。这些文件相当大,所以我希望能够逐行阅读(以避免内存问题)。如果线路符合条件;对该行进行一些操作,直到达到文件结尾。 – sdfasdfasdf