我有两个Raspberry Pi。我正在尝试使用scp将文件从一个Pi传输到另一个Pi。我试图通过Python来实现这一点,因为传输文件的程序是一个python文件。
下面是我对SCP部分的shell脚本(模糊了传递和IP):
#!/bin/sh
sshpass -p ######## scp test.txt pi@IP:/home/pi
及以下是启动Shell脚本的Python脚本。
import subprocess
subprocess.call(['./ssh.sh'])
print("DONE")
由于某种原因,python脚本不会回复任何错误并点击打印行,但文件不会被传输。当我在python之外运行scp命令时,文件传输就好了。我在这里做错了吗?
**** **** EDIT
我甚至无法让Subprocess使用这个,这就是为什么我最终使用na shell脚本。这是我对Subprocess的尝试:
import subprocess
subprocess.call("sshpass -p ######## scp test.txt pi@IP:/home/pi")
print"DONE"
我再次没有错误,但文件未被转移
<***> The authenticity of host 'IP (IP)' can't be established.
ECDSA key fingerprint is 13:91:24:8e:6f:21:98:1f:5b:3a:c8:42:7a:88:e9:91.
Are you sure you want to continue connecting (yes/no)?
我想传达通过&#34;是\ n&#34;到此提示以及之后的密码。这可能吗?
答案 0 :(得分:0)
第一次查询
您可以使用&#39; subprocess.popen&#39;获取执行命令的输出(STDOUT)和错误(STDERR)。
import subprocess
cmd = 'sshpass -p ****** scp dinesh.txt root@256.219.210.135:/root'
p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
print "Output is ",out
print "Error is ",err
如果您使用错误的密码执行上述代码,您将获得以下输出:
[root@centos /]# python code.py
Output is
Error is Permission denied, please try again.
在这种情况下,如果文件成功传输,则没有输出。 如果你执行像&#39; ls -l&#39;这样的命令然后打印输出。
第二次查询(****编辑#2 ****)
选项包括:
答案 1 :(得分:0)
我找到了一种更简单的方法来处理所有这些
sshpass -p ###### scp -o StrictHostKeyChecking=no test.txt pi@IP:/home/pi
-o开关允许我将IP自动存储到已知主机中,因此我根本不需要与shell通信。从Python到Shell的交互与该添加一起工作;仅通过子进程执行此操作也可以。
答案 2 :(得分:0)
如果你不介意尝试其他方法,那么从scp import中使用SCPClient是值得的。