2011-09-15 14 views
0

私はsshを使用してバックアップスクリプトを作成しようとしていて、subprocess.Popenモジュールを呼び出した後、 stderrに何かが含まれているかどうかをチェックし、エラーをログファイルに書き込みます。標準エラーログファイルpython log stderrをファイル

15-September-2011_12.14PM tar: Removing leading `/' from member names 

def server(): 
    bpath = "/mnt/backup/server-address/usrlocalbin/" 
    rpath = "/usr/local/bin" 
    bpath1 = "/mnt/backup/server-address/project/" 
    rpath1 = "/var/www/project" 
    cmd1 = "ssh -q [email protected] tar -zcf - "+rpath+" > " +bpath+"usrlocalbin.tar.gz" 
    cmd2 = "ssh -q [email protected] tar -zcf - "+rpath1+" > " +bpath1+"project.tar.gz" 
    exec1 = subprocess.Popen(cmd1,shell=True,stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    stdout,stderr = exec1.communicate() 
    if stderr: 
     log.write(t+ " "+ stderr + " \n") 
    else: 
     log.write(t+ " "+ "Backup of /usr/local/bin/ for server-address complete..\n") 
    exec2 = subprocess.Popen(cmd2, shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE) 
    stdout,stderr = exec2.communicate() 
    if stderr: 
     log.write(t+ " "+ stderr + " \n") 
    else: 
     log.write(t+ " "+ "Backup of /var/www/project for server-address complete..\n") 

の一部は、私はそれが最初の行を拾ったとstderrの一部としてそれを考えたと思います...任意のアイデアこの問題を解決する方法?

は、より多くの研究の後: - + RPATH + "

それは...ので、タールの

「のssh -qルートの@ CCE-linsvcs-001タールzcfP" を使用して固定

ました

「usrlocalbin.tar.gz> "+ bpath +" 新しいエラー

もう一度標準エラー出力をテストするには、リモートホストへのI無効にssh

ssh [email protected] 
ssh: connect to host server-address port 22: No route to host 

とstderrは、このエラーをキャッチしていませんか?どんな考え?

答えて

2

いいえ、冗長フラグはstderrにファイルリストを出力します。stdoutがtarファイルを書き込んでいるため、冗長フラグはstderrにファイルリストを出力します。あなたは冗長フラグを使わないでください。

ps。この小さなスクリプトでは、シェルスクリプトがより効率的だと思います。

+0

クールで、vフラグを外すのを忘れました。これでこのエラーが発生しました。「15-September-2011_12.48PM tar:メンバー名から先行する '/ 'を取り除く」 – krisdigitx

+0

2秒間、 '-P'フラグ、それが必要なものかどうかを調べるか、まさに文字列を取り除くか、最初の行だけを取り除くフィルタを書くことができます。シェルスクリプトがより適切です。 –

+0

私はすでにPフラグを使用していて、sshエラーを捕まえられません。これはPythonでこれを達成したいのですが、わかりやすくbashでわかります。 – krisdigitx

0

-nフラグをSSHコマンドに追加してみてください。 tarstdin入力を見れば、それが代わりにstderrstdoutにエラーを送信します:sshクライアント(-n)とstdinを無効に を「メンバー名から先頭の `/」を削除」

tarのためstderrを使用するようになります報告。

関連する問題