python - 在本地网络( linux> linux ) 和输出中,网络 python 复制文件

  显示原文与译文双语对照的内容
131 1

我正在尝试编写一个脚本来复制我的RaspberryPi中的文件,从我的桌面电脑。 下面是我的代码:( 一个


print"start the copy" 


path_pi = '//192.168.2.2:22/home/pi/Stock/'


file_pc = path_file +"/" + file


print"the file to copy is:", file_pc



shutil.copy2(file_pc, path_pi + file_pi)



实际上,我有这个错误: ( 法语)


IOError: [Errno 2] Aucun fichier ou dossier de ce type: '//192.168.2.2:22/home/pi/Stock/exemple.txt'



那么我怎么才能? 我必须在尝试复制之前连接 2台机器? 我有 tryed:


path_pi = r'//192.168.2.2:22/home/pi/Stock'



但问题是。 ( file_pc是一个变量)

谢谢

编辑:好的,我找到了这个:


command = 'scp', file_pc, file_pi 


p = subprocess.Popen(command, stdout=subprocess.PIPE) 



但是没有办法得到输出。 ( 使用 Shell=False )

时间: 原作者:

101 0

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 脚本打印的任何位置。

要以字符串形式获取输出,请执行以下操作:


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)



原作者:
104 0

是否启用了 SSH? 类似这样的内容可以帮助你:


import os


os.system("scp FILE USER@SERVER:PATH")



...