1

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)
4

2 に答える 2

3

ファイルから読み取る場合、行には終了改行文字が含まれます。代わりにこれを試してください:

for line in SwitchFile:
    Switches.append(line.strip())

また、変数は小文字の名前で呼び出すのが一般的であることにも注意してください。

于 2014-01-02T21:31:54.577 に答える
0

ファイルを正しく読み込んでいますか?ファイル内の情報が改行で区切られている場合は、次のように別のものを試してください。

with open(file_path, 'r') as f:
    data = f.readlines() #extracts to a list.
print data
于 2014-01-02T21:42:56.610 に答える