質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

15413閲覧

【Python】paramikoのstdout,stderrの値チェック

tei

総合スコア12

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2016/11/03 14:10

paramikoを利用して、サーバやネットワーク機器からコマンド結果を取得しようとしています。
コマンドが失敗したときのみ、stderrをエラーファイルに記載したいのですが、成功失敗に関わらず、エラーファイルが作成されてしまいます。こちらの対処方法を教えていただけないでしょうか?

python

1# coding:utf-8 2 3import paramiko 4 5HOST = '192.168.11.30' 6USER = 'user' 7PSWD = 'password' 8 9ssh = paramiko.SSHClient() 10ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 11ssh.connect(HOST, username=USER, password=PSWD) 12 13cmd = "cat /etc/ssh/sshd_config" 14stdin, stdout, stderr = ssh.exec_command(cmd) 15 16 17if stderr != "": 18 19 f = open("stderr"+date.strftime('%Y-%m-%d_%H%M%S')+".txt", "w") 20 f.write("=" * 40 + '\n') 21 f.write(" get command : " + cmd + '\n') 22 f.write("=" * 40 + '\n\n') 23 for line_err in stderr: 24 print (line_err.strip('\n')) 25 f.write(line_err.strip('\n')) 26 f.write('\n') 27 f.close() 28 29if stdout != "": 30 31 f = open("stdout"+date.strftime('%Y-%m-%d_%H%M%S')+".txt", "w") 32 f.write("=" * 40 + '\n') 33 f.write(" get command : " + cmd + '\n') 34 f.write("=" * 40 + '\n\n') 35 for line_out in stdout: 36 print (line_out.strip('\n')) 37 f.write(line_out.strip('\n')) 38 f.write('\n') 39 f.close() 40 41ssh.close() 42 43

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MasahikoHirata

2016/11/03 15:12

エラーファイルの内容が知りたいです。(原因特定の為)
guest

回答1

0

ベストアンサー

stdout,stderrはstringではなくChannelStderrFile型なので、以下の判定は誤りで、常に真になります。

if stderr != "":

いったん読込んで処理するとよいでしょう。

buf=stderr.read() if len(buf) > 0: # ファイルへ出力

投稿2016/11/04 01:06

can110

総合スコア38233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問