Я хочу сделать эквивалент этого сценария оболочки:
ssh visarend.solasistim.net tar -c /home/amoe/episodes | tar -vx -
Но с использованием Fabric 2.x.Это моя попытка, но я не уверен, в чем проблема.
remote_path = "/home/amoe/episodes"
c = fabric.Connection('visarend.solasistim.net')
with subprocess.Popen(['tar', '-vx'], stdin=subprocess.PIPE) as reader_proc:
c.run(
"tar -c %s" % (remote_path,),
out_stream=reader_proc.stdin
)
Это дает мне ошибку:
File "/usr/local/lib/python3.5/dist-packages/invoke/runners.py", line 525, in write_our_output
stream.write(encode_output(string, self.encoding))
TypeError: a bytes-like object is required, not 'str'
Наряду с некоторыми другими ошибками .Я понимаю, что это, вероятно, потому что поток, который я получаю из reader_proc.stdin
, является потоком байтов, а не потоком Unicode.Но я не понимаю, зачем run нужен поток в юникоде, или какое правильное изменение должно было бы заставить его работать.