我正在尝试使用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()
David Courna.. 5
在导入时执行这种代码确实是一个坏主意,尽管我不确定为什么它会挂起-可能是导入机制做了一些奇怪的事情,与paramiko的交互很差(也许是线程相关的问题?)。无论如何,通常的解决方案是将功能实现为功能:
def my_expensive_function(args): pass if __name__ == '__main__': import sys my_expensive_functions(sys.args)
这样,仅导入模块将不会执行任何操作,但是运行脚本将在命令行中使用给定参数执行函数。
在导入时执行这种代码确实是一个坏主意,尽管我不确定为什么它会挂起-可能是导入机制做了一些奇怪的事情,与paramiko的交互很差(也许是线程相关的问题?)。无论如何,通常的解决方案是将功能实现为功能:
def my_expensive_function(args): pass if __name__ == '__main__': import sys my_expensive_functions(sys.args)
这样,仅导入模块将不会执行任何操作,但是运行脚本将在命令行中使用给定参数执行函数。