当前位置:  开发笔记 > 编程语言 > 正文

为什么此python代码挂在import / compile上,但可以在shell中运行?

如何解决《为什么此python代码挂在import/compile上,但可以在shell中运行?》经验,为你挑选了1个好方法。

我正在尝试使用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)

这样,仅导入模块将不会执行任何操作,但是运行脚本将在命令行中使用给定参数执行函数。



1> David Courna..:

在导入时执行这种代码确实是一个坏主意,尽管我不确定为什么它会挂起-可能是导入机制做了一些奇怪的事情,与paramiko的交互很差(也许是线程相关的问题?)。无论如何,通常的解决方案是将功能实现为功能:

def my_expensive_function(args):
    pass

if __name__ == '__main__':
    import sys
    my_expensive_functions(sys.args)

这样,仅导入模块将不会执行任何操作,但是运行脚本将在命令行中使用给定参数执行函数。

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有