Ответ 1
shutil.copy2()
работает с локальными файлами. 192.168.2.2:22
предполагает, что вы хотите скопировать файлы по ssh. Вы можете подключить удаленный каталог (RaspberryPi) к локальному каталогу на вашем настольном компьютере (sshfs
), чтобы shutil.copy2()
работал.
Если вы хотите увидеть результат команды, тогда не устанавливайте stdout=PIPE
(обратите внимание: если вы установите stdout=PIPE
, тогда вы должны прочитать от p.stdout
, иначе процесс может блокироваться навсегда):
from subprocess import check_call
check_call(['scp', file_pc, file_pi])
scp
будет печатать в любых местах, где печатает ваш родительский Python script.
Чтобы получить вывод в виде строки:
from subprocess import check_output
output = check_output(['scp', file_pc, file_pi])
Хотя похоже, что scp
ничего не печатает по умолчанию, если выход перенаправлен.
Вы можете использовать pexpect
, чтобы scp
подумал, что он работает в терминале:
import pipes
import re
import pexpect # $ pip install pexpect
def progress(locals):
# extract percents
print(int(re.search(br'(\d+)%[^%]*$', locals['child'].after).group(1)))
command = "scp %s %s" % tuple(map(pipes.quote, [file_pc, file_pi]))
status = pexpect.run(command, events={r'\d+%': progress}, withexitstatus=1)[1]
print("Exit status %d" % status)