如何使用python通过网络自动发送文件?
以下是我需要做的: 我需要通过网络复制文件。要复制的文件位于同一台计算机中,我需要将其发送到远程计算机。它应该是自动化的,并且应该使用python制作。我非常熟悉python的os.popen和subprocess.popen。我可以用它来复制文件,但是,问题是一旦我运行了one-liner命令(如下图所示) scpxxx@localhost:file1.txt yyy@]192.168.104.XXX:file2.txt 它肯定会要求像这样的东西 是否确实要连接(是/否) 密码: 如果我没弄错的话,一旦我发送了这个命令(假设我是用python编写的) conn.modules.os.popen(“scpxxx@localhost:file1.txt yyy@]192.168.104.XXX:file2.txt“) 然后是这个命令 conn.modules.os.popen(“是”) 如果我在终端中手动输入它,将其与输出进行比较,输出(我很确定它会给我错误)将是不同的 您知道如何用python编写此代码吗?或者你能告诉我一些可以解决我问题的方法(命令等) 注意:我正在使用RPyC连接到其他远程机器,并且所有机器都在CentOS上运行似乎涵盖了您试图执行的操作 使用如何使用python通过网络自动发送文件?,python,shell,terminal,centos,Python,Shell,Terminal,Centos,以下是我需要做的: 我需要通过网络复制文件。要复制的文件位于同一台计算机中,我需要将其发送到远程计算机。它应该是自动化的,并且应该使用python制作。我非常熟悉python的os.popen和subprocess.popen。我可以用它来复制文件,但是,问题是一旦我运行了one-liner命令(如下图所示) scpxxx@localhost:file1.txt yyy@]192.168.104.XXX:file2.txt 它肯定会要求像这样的东西 是否确实要连接(是/否) 密码: 如果我没弄错
shutil.copyfile()
来使用操作系统级复制实用程序
如果您不想单击该链接,请点击以下链接:
import shutil
source_path = r"\\mynetworkshare"
dest_path = r"C:\TEMP"
file_name = "\\myfile.txt"
shutil.copyfile(source_path + file_name, dest_path + file_name)
根据我的经验,第一次使用sftp将提示用户接受主机公钥,例如
无法建立主机“xxxx”的真实性。
RSA密钥指纹是xxxx。您确定要继续连接吗
(是/否)?
输入yes后,公钥将保存在~/.ssh/known_hosts中,下次您将不会收到此类提示/警报
若要避免批处理脚本中出现此提示/警报,可以使用“禁用严格主机检查”
scp-Bqpo StrichostKeyChecking=否
但你很容易受到中间人的攻击
您还可以选择手动连接到目标服务器,并在部署批处理脚本之前保存主机公钥。通过Python执行此操作的正确方法实际上是使用
fabric
,如上面的注释所述
创建一个名为fabfile.py的文件
#!/usr/bin/python
from fabric.api import run, env, sudo, put
env.user = 'user'
env.hosts = ['xxxxx.org',]
def copy():
put('wong_8066.zip', '/home1/user/wong_8066.zip')
然后在本地计算机上运行fab copy
,它将提示输入密码
yeukhon@yeukhon-P5E-VM-DO:~$ fab copy
[xxxxxx.org] Executing task 'copy'
[xxxxxx.org] Login password:
[xxxxxx.org] put: wong_8066.zip -> /home1/user/wong_8066.zip
Done.
你可以用布料做更多的事情。结构用于部署。
您可以使用fabric在本地运行,也可以远程运行到多主机。您可以在运行时传递许多选项
如果要在没有密码提示的情况下自动执行此操作,可以按照文档中的说明指定ssh密钥的路径
fab使用Python的OptPass库,这意味着它尊重典型的
Linux或GNU风格的长短选项,以及自由混合
选项和参数。例如,fab task1-H主机名task2-i
path/to/keyfile与更简单的fab-H一样有效
主机名-i路径/to/keyfile task1 task2
不是使用键盘交互式身份验证,而是使用密码进行身份验证。这是用于windows还是linux计算机?当您说“网络共享”时,它是计算机的ip吗?因为我尝试了这个shutil.copyfile('/home/USER/Desktop/thisisthefile.txt','/192.168.104.XXX/home/USER/Desktop/thisisthefile.txt'),所以它没有给我这样的文件或目录错误