svn-backup-dumps.pyで質問です。WindowsサーバにてSubversionの差分バックアップを取ろうとしています。そこで「"D:\(python3格納先)\python.exe" "D:\(svn-backup-dumps.py格納先)\SubversionBackup\svn-backup-dumps.py" -i -b (バックアップ元のフォルダ) (バックアップ先のドライブ)」としたところ追記に記載するエラーが出て失敗しました。どうすればよいでしょうか?

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2017/10/18 15:10:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:halohalolin

Traceback (most recent call last):

File "D:\(svn-backup-dumps.py格納先)\svn-backup-dumps.py", line 682, in <mo</p>

dule>

rc = backup.execute()

File "D:\(svn-backup-dumps.py格納先)\svn-backup-dumps.py", line 598, in exe

cute

return self.export_relative_incremental()

File "D:\(svn-backup-dumps.py格納先)\svn-backup-dumps.py", line 579, in exp

ort_relative_incremental

headrev = self.get_head_rev()

File "D:\(svn-backup-dumps.py格納先)\svn-backup-dumps.py", line 437, in get

_head_rev

r = self.exec_cmd(cmd)

File "D:\(svn-backup-dumps.py格納先)\svn-backup-dumps.py", line 375, in exe

c_cmd

return self.exec_cmd_nt(cmd, output, printerr)

File "D:\(svn-backup-dumps.py格納先)\svn-backup-dumps.py", line 430, in exe

c_cmd_nt

bufout += buf

TypeError: must be str, not bytes

という結果になります。

Pythonのバージョンは 3.6.3 です。

よろしくお願い致します。

回答1件)

id:TransFreeBSD No.1

回答回数668ベストアンサー獲得回数268

ポイント100pt
            proc = Popen(cmd, stdout=PIPE, stderr=None, shell=False)
:
        stdout = proc.stdout
        bufout = ""
:
        buf = stdout.read(16384)
:
                bufout += buf

https://docs.python.jp/3/library/subprocess.html#subprocess.Popen.stdout

If the encoding or errors arguments were specified or the universal_newlines argument was True, the stream is a text stream, otherwise it is a byte stream.


ってな感じでotherwise it is a byte streamになってるからだと思いましたが、バイナリも通りそうなのでどっちかって言うと、423行目の

        bufout = ""

        bufout = b""

でどうかな?と思います。
ただ、3が考慮されてないので別でエラー出る可能性も。

id:halohalolin

TransFreeBSDさんありがとうございました。
結局のところa-kuma3さんが指摘されていた、Pythonを3系から2系にダウングレードする件を試してみたところあっさり成功した為、解決とさせていただきました。
またわからない点がありましたらよろしくお願い致します。

2017/10/19 10:11:24
  • id:halohalolin
    svn-backup-dumps.py は、 http://svn.apache.org/repos/asf/subversion/trunk/tools/server-side/svn-backup-dumps.py のものを拝借しました。
  • id:a-kuma3
    Python 2.x だったら動くような気もしますが。
  • id:halohalolin
    a-kuma3ありがとうございます。
    Pythonのバージョン指定に関する記述を見つけられなかったのですが(調べ方が甘かった?)、Python2用なんですかあのコード。
    また今度バージョンを下げれば改善するか調べてみます。
  • id:a-kuma3
    >(調べ方が甘かった?)
    ざっと svn のリポジトリを見てみましたが、Python のバージョンに関する記載は見つけられませんでした。
    Python 2.x → 3.x で文字列の扱いが変わってるっぽい(エラーメッセージで探すと、情報はいろいろと)ので、そうだろうな、と。

    # いまどき、git じゃなくて svn なところも、推して知るべしかと
  • id:halohalolin
    a-kuma3さんが指摘されていた、Pythonを3系から2系にダウングレードする件を試してみたところあっさり成功しました。
    大変ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません