python服務器之文件傳輸,python 文件傳輸

本文目錄一覽:

python 實現ssh的執行遠端命令和scp的不同機器文件傳輸功能

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import pexpect

def ssh_cmd(ip, passwd, cmd):

ret = -1

ssh = pexpect.spawn(‘ssh root@%s “%s”‘ % (ip, cmd))

try:

i = ssh.expect([‘password:’, ‘continue connecting (yes/no)?’], timeout=5)

if i == 0 :

ssh.sendline(passwd)

elif i == 1:

ssh.sendline(‘yes\n’)

ssh.expect(‘password: ‘)

ssh.sendline(passwd)

ssh.sendline(cmd)

r = ssh.read()

print r

ret = 0

except pexpect.EOF:

print “EOF”

ssh.close()

ret = -1

except pexpect.TIMEOUT:

print “TIMEOUT”

ssh.close()

ret = -2

return ret

利用pexpect模塊我們可以做很多事情,由於他提供了自動交互功能,因此我們可以實現ftp,telnet,ssh,scp等的自動登錄,還是比較實用的。根據上面的代碼相信讀者已經知道怎麼實現了(python就是那麼簡單!)。

上面的代碼去完成任務還是比較費時間的,因為程序要等待自動交互出現,另外ubuntu用ssh連接就是比較慢,要進行一系列的驗證,這樣才體現出ssh

的安全。我們要提高效率,在最短的時間內完成。後來我發現了python裏面的paramiko模塊,用這個實現ssh登錄更加簡單。看下面的代碼:

複製代碼 代碼如下:

#-*- coding: utf-8 -*-

#!/usr/bin/python

import paramiko

import threading

def ssh2(ip,username,passwd,cmd):

try:

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(ip,22,username,passwd,timeout=5)

for m in cmd:

stdin, stdout, stderr = ssh.exec_command(m)

# stdin.write(“Y”) #簡單交互,輸入 『Y’

out = stdout.readlines()

#屏幕輸出

for o in out:

print o,

print ‘%s\tOK\n’%(ip)

ssh.close()

except :

print ‘%s\tError\n’%(ip)

if __name__==’__main__’:

cmd = [‘cal’,’echo hello!’]#你要執行的命令列表

username = “” #用戶名

passwd = “” #密碼

threads = [] #多線程

print “Begin……”

for i in range(1,254):

ip = ‘192.168.1.’+str(i)

a=threading.Thread(target=ssh2,args=(ip,username,passwd,cmd))

a.start()

上面的程序還是有些技巧的:

1.

利用多線程,同時發出登錄請求,同時去連接電腦,這樣速度快很多,我試了一下,如果不用多線程,直接一個一個挨着執行的話,大約5~10秒鐘才能對一台電

腦操作完,具體時間要根據命令的來決定,如果是軟件安裝或者卸載時間要更長一些。這樣下來怎麼也要一二十分鐘,用多線程後就快多了,所有的命令執行完用了

不到2分鐘!

2.最好用root用戶登錄,因為安裝或者卸載軟件的時候如果用普通用戶又會提示輸入密碼,這樣又多了一次交互,處理起來就比較麻

煩!安裝軟件時apt-get install xxx

最好加上「-y」參數,因為有時安裝或刪除軟件時提示是否繼續安裝或卸載,這又是一次自動交互!加上那個參數後就沒有人機交互了。

3. 循環時循環所有ip,因為計算機的ip是路由器自動分配的,保險起見,最好全部都執行,保證沒有遺漏的主機

4.遠端執行命令時如果有交互,可以這樣用 stdin.write(“Y”)來完成交互,「Y」就是輸入「Y」。

5.把所有的命令放到一個列表裏面,遍歷列表可以依次執行列表裏面的命令

6.為了更好的進行控制,最好在電腦上提前把root用戶打開,裝好ssh服務器並讓其開機自動執行。

如何把python代碼上傳到服務器上

使用pip或easy_install可以管理和安裝python的package包,實際上它們都是從pypi服務器中搜索和下載package的。目前在pypi服務器上,有超過三萬多個package,同時還允許我們將自己的代碼也上傳發佈到服務器上。這樣,世界上的所有人都能使用pip或easy_install來下載使用我們的代碼了。

具體步驟如下:

首先創建項目文件和setup文件。

目錄文件結構如下:

project/

simpletest/

__init__.py

test.py

setup.py

假設項目文件只有一個simpletest包,裏面有一個test.py文件。

創建的setup.py文件格式大致如下,其中,install_requires字段可以列出依賴的包信息,用戶使用pip或easy_install安裝時會自動下載依賴的包。詳細的格式參考文檔。

from setuptools import setup, find_packages

setup(

name = ‘simpletest’,

version = ‘0.0.1’,

keywords = (‘simple’, ‘test’),

description = ‘just a simple test’,

license = ‘MIT License’,

install_requires = [‘simplejson=1.1’],

author = ‘yjx’,

author_email = ‘not@all.com’,

packages = find_packages(),

platforms = ‘any’,

)

然後將代碼打包。

打包只需要執行python

setup.py xxx命令即可,其中xxx是打包格式的選項,如下:

# 以下所有生成文件將在當前路徑下 dist 目錄中

python setup.py bdist_egg # 生成easy_install支持的格式

python setup.py sdist # 生成pip支持的格式,下文以此為例

發佈到pypi。

發佈到pypi首先需要註冊一個賬號,然後進行如下兩步:

註冊package。輸入python setup.py register。

上傳文件。輸入python setup.py sdist upload。

安裝測試

上傳成功後,就可以使用pip來下載安裝了。

另外,pypi還有一個測試服務器,可以在這個測試服務器上做測試,測試的時候需要給命令指定額外的”-r”或”-i”選項,如python

setup.py register -r “”,python

setup.py sdist upload -r “”,pip

install -i “” simpletest。

發佈到測試服務器的時候,建議在linux或cygwin中發佈,如果是在windows中,參考文檔,需要生成.pypirc文件

python 怎麼實現兩台服務器上批量複製文件

1、把excel里文件名那一列複製,粘進一個空白的文本文件,命名為filelist.txt,上傳到服務器。

2、在服務器上使用腳本導出,python腳本 fileCp.py 。

代碼示例:

#! python

#coding:utf-8

##!/usr/bin/python

# Filename : fileCp.py

import sys

import os

import shutil

fileList=’filelist.txt’

targetDir=’files’

filedir = open(fileList)

line = filedir.readline()

log = open(‘running.log’,’w’)

while line:

line = line.strip(‘\n’);

basename = os.path.basename(line)

exists = os.path.exists(line)

if exists :

print ‘copy ‘+line+’ to ‘+os.getcwd()+’/’+targetDir+’/’+basename

log.write(‘copy ‘+line+’ to ‘+os.getcwd()+’/’+targetDir+’/’+basename+’\r\n’)

shutil.copy(line,targetDir+’/’+basename)

else:

print line+’ not exists’

log.write(line+’ not exists’+’\r\n’)

line = filedir.readline()

log.close()

如何使用python在局域網上傳送文件

可以使用python做HTTP服務器,然後就可以傳文件了

首先確保裝了Python,Python內置了一個簡單的HTTP服務器,只需要在命令行下面敲一行命令,一個HTTP服務器就起來了:

python -m SimpleHTTPServer 80

後面的80端口是可選的,不填會採用缺省端口8000。注意,這會將當前所在的文件夾設置為默認的Web目錄,試着在瀏覽器敲入本機地址:

如果當前文件夾有index.html文件,會默認顯示該文件,否則,會以文件列表的形式顯示目錄下所有文件。這樣已經實現了最基本的文件分享的目的,你可以做成一個腳本,再建立一個快捷方式,就可以很方便的啟動文件分享了。如果有更多需求,完全可以根據自己需要定製,具體的請參見官方文檔SimpleHTTPServer,或者直接看源碼。我拷貝一段,方便參考:

import SimpleHTTPServer

import SocketServer

PORT = 8000

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler

httpd = SocketServer.TCPServer((“”, PORT), Handler)

print “serving at port”, PORT

httpd.serve_forever()

python里tcpip通訊客戶端和服務器端傳文件怎麼寫?

最簡單的,先傳一個定長的位元組表示文件的長度,然後開傳。其實ftp就是標準的tcp/ip下傳文件的應用啊。

怎麼用http上傳一個文件到服務器 python

首先,標準HTTP協議對上傳文件等表單的定義在這裡:wwwietforg/rfc/rfc1867txt 大概數據包格式如下:

單文件:

Content-type: multipart/form-data, boundary=AaB03x

–AaB03x

content-disposition: form-data; name=”field1″

Joe Blow

–AaB03x

content-disposition: form-data; name=”pics”; filename=”file1.txt”

Content-Type: text/plain

… contents of file1.txt …

–AaB03x–

多文件:

Content-type: multipart/form-data, boundary=AaB03x

–AaB03x

content-disposition: form-data; name=”field1″

Joe Blow

–AaB03x

content-disposition: form-data; name=”pics”

Content-type: multipart/mixed, boundary=BbC04y

–BbC04y

Content-disposition: attachment; filename=”file1.txt”

其次,python上傳文件的幾種方法:

1 自己封裝HTTP的POST數據包:http//stackoverflowcom/questions/680305/using-multipartposthandler-to-post-form-data-with-python

import httplibimport mimetypesdef post_multipart(host, selector, fields, files): content_type, body = encode_multipart_formdata(fields, files) h = httplib.HTTP(host) h.putrequest(‘POST’, selector) h.putheader(‘content-type’, content_type) h.putheader(‘content-length’, str(len(body))) h.endheaders() h.send(body) errcode, errmsg, headers = h.getreply() return h.file.read() def encode_multipart_formdata(fields, files): LIMIT = ‘———-lImIt_of_THE_fIle_eW_$’ CRLF = ‘\r\n’ L = [] for (key, value) in fields: L.append(‘–‘ + LIMIT) L.append(‘Content-Disposition: form-data; name=”%s”‘ % key) L.append(”) L.append(value) for (key, filename, value) in files:

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/244882.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:05
下一篇 2024-12-12 13:05

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29

發表回復

登錄後才能評論