这是我需要做的:
我需要通过网络复制文件。要复制的文件在一台机器上,我需要将它发送到远程机器上。它应该是自动化的,并且应该使用 python 制作。我对python的os.popen和subprocess.Popen相当熟悉。我可以用它来复制文件,但是,问题是一旦我运行了单行命令(如下所示)
scp xxx@localhost:file1.txt yyy@]192.168.104.XXX:file2.txt
它肯定会要求类似的东西
Are you sure you want to connect (yes/no)?
Password :
如果我没记错的话,一旦我发送了这个命令(假设我在 python 中编码)
conn.modules.os.popen("scp xxx@localhost:file1.txt yyy@]192.168.104.XXX:file2.txt")
然后是这个命令
conn.modules.os.popen("yes")
如果我在终端中手动输入,输出(我很确定它会给我错误)与输出相比会有所不同。
你知道如何在 python 中编写代码吗?或者你能告诉我一些可以解决我问题的东西(命令等)吗
注意:我正在使用 RPyC 连接到其他远程机器并且所有机器都在 CentOS 上运行
最佳答案
通过 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 用于部署。
您可以使用fabric 在本地运行东西,或远程运行多个主机。您可以在运行时传递许多选项。
如果您想在没有
password prompt
的情况下自动执行此操作,您可以按照文档中的说明指定 ssh-key 的路径。fab uses Python’s optparse library, meaning that it honors typical Linux or GNU style short and long options, as well as freely mixing options and arguments. E.g. fab task1 -H hostname task2 -i path/to/keyfile is just as valid as the more straightforward fab -H hostname -i path/to/keyfile task1 task2.
关于python - 如何使用python自动通过网络发送文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12613552/