1 python shell sftp compilation
我正在尝试使用python sftp文件,并且该代码在交互式shell中非常有效-甚至可以一次全部粘贴。
当我尝试导入文件(只是对其进行编译)时,代码将挂起,没有异常或明显的错误。
如何获取代码进行编译,或者有人拥有可以通过其他方法完成sftp的有效代码?
这段代码挂在ssh.connect()语句上:
“”“ ProblemDemo.py
从paramiko演示文件中删除。
该代码在shell中有效,但在尝试导入时会挂起!
“”
从进口睡眠开始
导入操作系统
进口paramiko
sOutputFilename =“ redacted.htm”#-有效负载文件
主机名=“ redacted.com”
#### - 警告!嵌入式密码!尽快删除。
sUsername =“已编辑”
sPassword =“已编辑”
sTargetDir =“已编辑”
#-获取主机密钥(如果我们知道的话)。
hostkeytype =无
主机密钥=无
host_keys = {}
尝试:
host_keys = paramiko.util.load_host_keys(os.path.expanduser('〜/ .ssh / known_hosts'))
除了IOError:
尝试:
#也尝试〜/ ssh /,因为Windows不能有一个名为〜/ .ssh /的文件夹
host_keys = paramiko.util.load_host_keys(os.path.expanduser('〜/ ssh / known_hosts'))
除了IOError:
打印'***无法打开主机密钥文件'
host_keys = {}
如果host_keys.has_key(主机名):
hostkeytype = host_keys [hostname] .keys()[0]
hostkey = host_keys [hostname] [hostkeytype]
打印'使用类型为%s的主机密钥'%hostkeytype
ssh = paramiko.Transport((主机名,22))
ssh.connect(用户名= s用户名,密码= sPassword,主机密钥=主机密钥)
sftp = paramiko.SFTPClient.from_transport(ssh)
sftp.chdir(sTargetDir)
sftp.put(sOutputFilename,sOutputFilename)
ssh.close()
在导入时执行这种代码确实是一个坏主意,尽管我不确定为什么它会挂起-可能是导入机制做了一些奇怪的事情,与paramiko的交互很差(也许是线程相关的问题?)。无论如何,通常的解决方案是将功能实现为功能:
def my_expensive_function(args):
pass
if __name__ == '__main__':
import sys
my_expensive_functions(sys.args)
Run Code Online (Sandbox Code Playgroud)
这样,仅导入模块将不会执行任何操作,但是运行脚本将在命令行中使用给定参数执行函数。