VPN に接続するために作成した Python スクリプトがあります。その前に、外部 IP をテストし、出力を変数「originip」として記録してから、vpn に接続し、テストを再度実行します。私のoriginip、次にnewipを表示し、origin ipとnewipが同じかどうかをテストする条件を実行し、エラーがあったと言います。後でロジックを追加します。現在、プログラムは正常に動作しますが、Else 行に移動して「正常に接続されました」と出力する代わりに、常に「エラーが発生しました。リセット中です」と出力します。
ここで私のifロジックに何か問題があると思います:
if newip and originip == originip:
print "there was an error, resetting..."
else:
print "You are now connected successfully"
したがって、上記をテストしたところ、VPN が正常に接続されると、新しい IP アドレスと古い IP アドレスが異なると報告され、「エラーが発生しました。リセットしています」と表示されます。接続すると、newip と originip の両方が同じものとして表示されます。 、「エラーが発生しました、リセットしています...」も出力されます
上記のステートメントのelse部分を実行することができませんでした。
これがプログラムのPython側全体です
#!/usr/bin/env python
import pexpect
import sys
import os
import time
import subprocess
secdelay = int(raw_input("How many seconds before resetting? "))
p = subprocess.Popen(["./checkmyip.sh"], shell=False, stdout=subprocess.PIPE)
originip = p.stdout.read()
print 'Public IP Address is', originip
child = pexpect.spawn ('./vpn.sh -arg1')
child.expect ('')
child.expect ('(?i)Enter Aut Username:')
child.sendline ('myusername')
child.expect ('(?i)Enter Auth Password:')
child.sendline ('mypassword')
print "Establishing connection..."
time.sleep(10)
p = subprocess.Popen(["./checkmyip.sh"], shell=False, stdout=subprocess.PIPE)
newip = p.stdout.read()
print "The New IP is ",newip
print "the old IP was ", originip
if newip and originip == originip:
print "there was an error, resetting..."
else:
print "You are now connected successfully"
print "sleeping for ",secdelay," seconds"
time.sleep(secdelay)
child.sendcontrol('c')
if child.isalive():
child.sendcontrol('c')
child.close()
if child.isalive():
print 'Child did not exit gracefully.'
else:
print 'Child exited gracefully.'
最後に、「checkmyip.sh」スクリプトに追加したコードを次に示します。それは単純なwgetです:
#!/usr/bin/env bash
wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
したがって、スクリプトは正常に動作します。私を混乱させているのは、このエラー チェック ロジックだけです。if x と y == x が機能しないのはなぜですか。x と y の両方が、if ステートメントのすぐ上の印刷行に異なる値を列挙すると、混乱します。
提案や助けをいただければ幸いです。読んでくれてありがとう!
みんな助けてくれてありがとう!修正されたコードは次のとおりです。
if newip and originip == originip:
に変更されました
if newip == originip: