Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 脚本在添加try块并写入两个日志文件后中止_Python_Pxssh - Fatal编程技术网

Python 脚本在添加try块并写入两个日志文件后中止

Python 脚本在添加try块并写入两个日志文件后中止,python,pxssh,Python,Pxssh,我有一个文本文件,它是一个名为solaris_h.txt的服务器列表。此列表中的某些服务器,我无法进行身份验证,可能是因为我没有帐户或密码不正确。当列表上的特定服务器上的身份验证失败时,脚本将中止。因此,有人建议使用try和除了块。我希望脚本完成solaris_h.txt中的服务器列表,并将成功登录的服务器写入日志文件,将未通过身份验证的服务器写入另一个日志文件。添加try块后,在执行脚本时,它会立即无误退出。如何让脚本将成功登录写入一个日志文件,并将未成功登录写入另一个日志文件 #!/usr/

我有一个文本文件,它是一个名为solaris_h.txt的服务器列表。此列表中的某些服务器,我无法进行身份验证,可能是因为我没有帐户或密码不正确。当列表上的特定服务器上的身份验证失败时,脚本将中止。因此,有人建议使用
try
除了
块。我希望脚本完成solaris_h.txt中的服务器列表,并将成功登录的服务器写入日志文件,将未通过身份验证的服务器写入另一个日志文件。添加
try
块后,在执行脚本时,它会立即无误退出。如何让脚本将成功登录写入一个日志文件,并将未成功登录写入另一个日志文件

#!/usr/bin/python

import pxssh
import sys

log = open("myprog.log", "a")
sys.stdout = log

s = pxssh.pxssh(timeout=30, maxread=2000000)
s.SSH_OPTS += "-o StrictHostKeyChecking=no"
s.SSH_OPTS += "-o UserKnownHostsFile=/dev/null"
s.SSH_OPTS += "PubkeyAuthentication=no"

f=open('solaris_h.txt','r')
for line in f:

try:
    s.login(line,'xxxx','xxxxxx')
    z = s.sendline('uname -a')
    s.prompt()
    y = s.before
    print("%s %s" % (line, y))
    s.logout()
except pxssh.ExceptionPxssh:
    pass
以下是身份验证失败时的错误

Traceback (most recent call last):
File "./z.py", line 17, in <module>
 s.login(line,'username','password')
File "/usr/lib/python2.7/site-packages/pxssh.py", line 226, in login
  raise ExceptionPxssh ('password refused')
pxssh.ExceptionPxssh: password refused
回溯(最近一次呼叫最后一次):
文件“/z.py”,第17行,在
s、 登录(第行,'username','password')
文件“/usr/lib/python2.7/site packages/pxsh.py”,第226行,登录
引发异常PXSSH('密码被拒绝')
pxssh.ExceptionPxssh:密码被拒绝

如果您想忽略登录失败时出现的错误,可以围绕登录执行
try/except
块,如:

try:
    s.login(line, 'username', 'password')
    z = s.sendline('uname -a')
    s.prompt()
    y = s.before
    print("%s %s" % (line, y))

    s.logout()
except pxssh.ExceptionPxssh:
    pass

仅对身份验证代码使用try-except块。因此,如果出现任何错误,它们将被捕获,循环将继续使用下一个服务器名称。

@Stephen Rauch继续到文本文件的末尾。请缩进您在上面正确完成的操作-这是我们帮助您诊断问题的唯一方法。记住——缩进在python中很重要!我缩进了,但脚本仍然存在。您的脚本可能缩进正确,但您的问题不是。除非你正确缩进你的问题,否则我们无法判断你在做什么。我编辑了我的问题。我不想忽略错误,我想将成功和未成功写入日志文件,在写入答案时我是如何知道这一点的?现在,当我插入try/except时,脚本会立即退出,不会出现错误。这取决于您插入块的方式。如果插入正确,则它将继续执行
f
中的下一行。我需要有人验证我是否正确插入了块,我的脚本将立即无误退出。