我正在研究一种简单的工具,它将文件传输到硬编码的位置,密码也是硬编码的.我是一个python新手,但多亏了ftplib,很简单:
import ftplib
info= ('someuser', 'password') #hard-coded
def putfile(file, site, dir, user=(), verbose=True):
"""
upload a file by ftp to a site/directory
login hard-coded, binary transfer
"""
if verbose: print 'Uploading', file
local = open(file, 'rb')
remote = ftplib.FTP(site)
remote.login(*user)
remote.cwd(dir)
remote.storbinary('STOR ' + file, local, 1024)
remote.quit()
local.close()
if verbose: print 'Upload done.'
if __name__ == '__main__':
site = 'somewhere.com' #hard-coded
dir = './uploads/' #hard-coded
import sys, getpass
putfile(sys.argv[1], site, dir, user=info)
Run Code Online (Sandbox Code Playgroud)
问题是我找不到任何支持sFTP的库.安全地做这样的事情的正常方法是什么?
编辑:感谢这里的答案,我已经让它与Paramiko合作,这就是语法.
import paramiko
host = "THEHOST.com" …Run Code Online (Sandbox Code Playgroud) 我有以下挂起的python代码:
cmd = ["ssh", "-tt", "-vvv"] + self.common_args
cmd += [self.host]
cmd += ["cat > %s" % (out_path)]
p = subprocess.Popen(cmd, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate(in_string)
Run Code Online (Sandbox Code Playgroud)
它应该通过ssh将字符串(in_string)保存到远程文件中.
文件已正确保存,但随后进程挂起.如果我使用
cmd += ["echo"] instead of
cmd += ["cat > %s" % (out_path)]
Run Code Online (Sandbox Code Playgroud)
这个过程没有挂起所以我很确定我误解了沟通认为流程退出的方式.
你知道怎么写这个命令所以"cat>文件"不能让沟通挂起吗?