当我使用--host=192.168.1.1作为参数时,这个脚本就像一个符咒。使用--host_文件时=东道主,它失败,因为它似乎与“如果hfile为真:”不匹配。所以这显然是错误的。什么是更好的术语来匹配我的--host_文件=名称.TXT在
这是我的错误
Traceback (most recent call last):
File "asaos-snmpv3-tool-hostfile.py", line 147, in <module>
main()
File "asaos-snmpv3-tool-hostfile.py", line 138, in main
child = connect(user, host, passwd, en_passwd)
File "asaos-snmpv3-tool-hostfile.py", line 47, in connect
constr = 'ssh ' + user + '@' + host
TypeError: cannot concatenate 'str' and 'NoneType' objects
如果它失败了,我会预料到它使用“child=connects(user,hosts,passwd,en_passwd”时出错 如果你仔细看,你会发现在我的“If”下我使用connects,和hosts(复数),但它看起来像是在试图解析main connect和host下的文件。在
^{pr2}$非常感谢您的帮助!在
首先,您的
hfile
要么是一个字符串,要么是None
。这两个都不是is True
。它们都不是偶数。在非空弦是真理。^{cd2>不是。两者都不是非空字符串。因此,如果您想将空字符串(例如,
host-file=''
)视为无参数,只需测试hfile
的真实性:另一方面,如果要将空字符串视为有效参数,请测试
^{pr2}$None
-ness:你对
host
没有这个问题的原因很简单:你没有在任何地方测试host
,所以没有地方会出错。在但是,也许您应该测试}。这就是为什么会出现异常,因为库正在尝试将所有这些字符串连接在一起,而其中一个不是字符串。在
host
的None
。我不确定您在这种情况下到底想做什么,但是您肯定不想用None
来调用connect(user, host, passwd, en_passwd)
,而不是{但是您的
if
永远不会触发,所以在该块中做什么并不重要。另一方面,connect
总是运行,所以这就是失败的原因。在最后,你的逻辑一开始就没有意义了。在
查看
hosts
文件。对于每一行,请选中hfile
。如果这是真的,您将执行一个连接,然后exit
。如果它不是真的,它就永远不会变成truthy
,所以您也将跳过所有其他行。所以,你不可能处理第一行之外的任何行。在另外,在这个循环中,您将
hosts
替换为每一行。在另外,你正在剥离
r
而不是\r
,而且你在\n
之前剥离了它,这意味着即使你做得对,也不会有任何东西需要剥离。在最后,您得到了
main
定义之后的所有顶层代码,并尝试使用main
的局部变量,甚至从不调用main
。我怀疑您可能混合了制表符和空格,所以最后粘贴到这里的内容与您在原始脚本中的不匹配;如果是这样的话,几乎可以肯定的是,如果您幸运的话(并得到了一个IndentationError
)很难调试的问题,如果您没有(只是有错误的流控制),则几乎不可能。找到一个文本编辑器,它可以自动将标签页转换成空格和/或直观地显示标签页(除了记事本和TextEdit几乎可以做任何事情…),并使用-tt
标志测试脚本,以防它滑过编辑器。在不管怎样,也许你想要this之类的东西,但我只是在猜测。在
错误是由
user
或host
参数导致的connect
是None
。在我看不到您在哪里设置
user
。在看起来,
connect
的host
参数来自args.host
。如果您没有给它一个host
参数,这个值将是默认的None
。在当使用
argparse
调试代码时,我经常print args
只是为了确保它像我预期的那样解析输入。在相关问题 更多 >
编程相关推荐