Python 2.7.3 を使用した Debian 32 ビットの最新バージョンで、ソースから Plink (PuTTY ツール スイートの一部) をコンパイルしました。なじみのない人のために説明すると、Plink は SSH サーバー上でコマンドを発行するための優れたツールであり、コマンドをスクリプト化できます (私がここで行っているのは、Cisco スイッチにとって素晴らしいものであることがわかりました)。
次のような各行のスイッチの名前を含むswitch.listというファイルがあります。
Net-Switch-1
Net-Switch-2
Backbone-1
これで、私の Python スクリプトは次のようになります。
import subprocess
Switches = []
SwitchFile = open("switch.list")
for line in SwitchFile:
Switches.append(line)
SwitchFile.close()
for sw in Switches:
p = subprocess.Popen(["./plink","-ssh","-l","admin","-pw","REDACTED","-noagent","-batch",sw,"show","clock"], stdout=subprocess.PIPE)
print p.communicate()
私の出力は次のとおりです。
Unable to open connection:
Name or service not known
('', None)
何度も何度も、スイッチの回数だけ。これは、ファイルの読み取りと配列へのデータの取り込みは問題なく行われていることを示していますが、Plink の for ループが台無しになっています。
トラブルシューティング: swをNet-Switch-1 のようなハードコードされたスイッチ名に置き換えると、問題なく動作します。これが、変数 sw が正しく渡されていないことを私が知っている理由です。
その他のトラブルシューティング: スイッチ名を省略して CLI から Plink コマンドを実行すると、同じエラー出力が表示されますが、「('', None)」の 3 行目はありません。
トリッキーになり始めるトラブルシューティング: これも機能しません:
p = subprocess.Popen(["./plink","-ssh","-l","admin","-pw","REDACTED","-noagent","-batch",(" "+sw),"show","clock"], stdout=subprocess.PIPE)