2012-09-27 55 views
0

以下是我需要做的:如何使用python自動通過網絡發送文件?

我需要通過網絡複製文件。要複製的文件在一臺機器上,我需要將它發送到遠程機器。它應該是自動的,它應該使用python。我對python的os.popen和subprocess.Popen非常熟悉。我可以使用它來複制文件,但是,問題是一旦我運行的一行命令(如下面所示)

SCP XXX @本地:FILE1.TXT YYY @] 192.168.104 .XXX:FILE2.TXT

它肯定會問這樣的事情

你確定你想連接(是/否)?

密碼:

如果我不是錯了,一旦我發出這個命令(假設我這個代碼在python)

conn.modules.os.popen(「SCP XXX @本地:FILE1.TXT YYY @] 192.168.104.XXX:file2.txt「)

,隨後由該命令

conn.modules.os.popen(「是」)

輸出(我敢肯定,它會給我的錯誤)將是不同的比較來輸出,如果我手動型它在終端。

你知道如何在Python中編碼嗎?或者你可以告訴我什麼(命令等),將解決我的問題

注:我使用RPyC連接到其他遠程機器和所有機器都在CentOS運行

+1

您可以使用[SSH密鑰](http://sshkeychain.sourceforge.net/mirrors/SSH-with-Keys-HOWTO/SSH-with-Keys-HOWTO)代替對密碼使用鍵盤交互式身份驗證.html)進行身份驗證。 –

+0

這是用於windows還是linux機器? – Tadgh

+1

在Python中使用'fabric'。 – user1012451

回答

0

This question似乎涵蓋你正在努力去做。

使用shutil.copyfile()使用OS級複製實用程序

如果你不想點擊鏈接,那就是:

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) 
+0

當你說網絡共享,它是機器的IP?因爲我試過這個shutil.copyfile('/ home/USER/Desktop/thisisthefile.txt','/ 192.168.104.XXX/home/USER/Desktop/thisisthefile.txt'),它沒有給我這樣的文件或目錄錯誤 –

0

每次我的經驗,使用SFTP方式第一時間將提示用戶接受主機公鑰,如

The authenticity of host 'xxxx' can't be established. RSA key fingerprint is xxxx. Are you sure you want to continue connecting (yes/no)? 一旦你輸入是,公共密鑰將被保存在〜/ .ssh/known_hosts中,下次你就不會得到這樣的提示/警報。

爲了避免在批處理腳本此提示/警報,您可以使用轉嚴格的主機檢查過使用

SCP -Bqpo StrictHostKeyChecking =沒有

,但你很容易受到人爲IN-中間人攻擊。

在部署批處理腳本之前,您還可以選擇手動連接到目標服務器並保存主機公鑰。

1

正確使用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,它會提示輸入密碼。

[email protected]:~$ fab copy 
[xxxxxx.org] Executing task 'copy' 
[xxxxxx.org] Login password: 
[xxxxxx.org] put: wong_8066.zip -> /home1/user/wong_8066.zip 

Done. 

你可以做更多的面料。 Fabric用於部署。 您可以使用結構在本地運行,也可以遠程運行多個主機。當你跑步時,你可以傳遞很多選項。

如果您想在不使用password prompt的情況下自動執行此操作,您可以指定ssh-key的路徑,如文檔中所述。

晶圓廠使用Python的optparse庫,這意味着榮譽典型 Linux或GNU風格的短期和長期的選項,以及自由混合 選項和參數。例如。 fab task1 -H主機名task2 -i path/to/keyfile與更直接的fab -H hostname -i path/to/keyfile task1 task2一樣有效。

相關問題