`
lunan
  • 浏览: 78637 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

python sftp

 
阅读更多

windows调用linux系统中的sftp功能。语言还是c++ 可以选择libcurl + OpenSSL + Zlib + Libssh2

结合QT编译,可能是自己太笨,搞了2天也没编译好环境,后来选择了pythonparamiko实现上传下载功能,tarfile用来解压,用中午的午休时间搞定。

 

选择这条路,最后证明是噩梦的开始,如c++调用python,c++中的多线程在python中的支持,python环境打包,win7下编译好的程序在winXP中由于python27.dll的依赖不能用...

成也python,败也python,后续博客中会陆续更新。

 

环境:

 

Python 2.7 pythonxy2.7集成

Paramiko: paramiko-1.7.7.1.zip

 

 

pythonsftp.pyc 文件如下:

 

# -*- coding: utf-8 -*- 
 
import sys
import os
import getpass
import socket
import paramiko
from datetime import date, timedelta
import tarfile
#解压
def pythonTgz(stcPath,tagPath):
	#已"r:gz"格式打开
    tarobj = tarfile.open(stcPath, "r:gz")
    for tarinfo in tarobj:
        tarobj.extract(tarinfo.name, tagPath)
    tarobj.close()

#上传下载
def pythonSftp(isget,hostname,port,sftpUsername,sftpPassword,remotepath,localpath,fileList):
#创建一个连接实例
        t = paramiko.Transport((hostname,port)) 
 		#连接服务器
        t.connect(username = sftpUsername, password = sftpPassword)
		#创建一个sftp客户端实例
        pSftp = paramiko.SFTPClient.from_transport(t)
		#循环每个文件上传/下载
for f in fileList:
                pSftp.put(os.path.join(localpath,f),remotpathtemp)

        …

 

 代码实现很挫,很挫...

 

boost对python的引用

添加vc++对python、boost库的应用

 

 

拷贝相关文件

 

拷贝上一步生成的动态编译库到程序目录

boost_pyhton-vc100-mt-1_49.dll

boost_pyhton-vc100-mt-1_49.lib

 

boost_pyhton-vc100-mt-gd_49.dll

boost_pyhton-vc100-mt-gd_49.lib

 

拷贝python上传下载实现代码

pythonsftp.pyc

 

程序实现

 

#include <boost/python.hpp>
#include <Python.h>

#ifdef _DEBUG
#pragma comment(lib, "boost_python-vc100-mt-gd-1_49.lib")
#pragma  message("boost_python --> debug~lab")
#else
#pragma comment(lib, "boost_python-vc100-mt-1_49.lib")
#pragma  message("boost_python --> reless~lib")
#endif
…
int psdsftp::unCompres( const std::string &resPath, const std::string &tagPath )
{
	//检查功能有效性
	if(!Py_IsInitialized())   
	{   
		cout <<"初始化失败!"<< endl;
		return -1;   
	}
	// 调用Python中的sftp函数并获得返回值
	try
	{
		call_method<char *>(module.get(), m_funUnCom.c_str(), 
			resPath.c_str(),
			tagPath.c_str() );
	}
	catch (...)
	{
		cout <<"出错了!~"<< endl;
	}
	return 0;
}
 

 

python 打包选择的是 py2exe(pythonxy中已经安装)

 

 

创建配置文件mysetup.py

from distutils.core import setup
import py2exe  
import sys
import os
import getpass
import socket
import paramiko
import tarfile
setup(console = ["pythonsftp.py"])
...
 

pythonsftp.py为要打包的python文件

 

<!--[if !supportLists]-->Ø  <!--[endif]-->提取python文件

复制mysetup.py到程序发布文件夹,在cmd窗口指向程序文件夹

cd D:\work\SFTP\SFTPPython\test_boost_python_cmd

python mysetup.py py2exe

参考:

http://blog.csdn.net/andoring/article/details/6616430

http://wiki.woodpecker.org.cn/moin/LeoJay/PyPackage

 

复制相关的文件

复制pythonsftp.pyc文件到发布根目录

<!--[if !supportLists]-->Ø  <!--[endif]-->如果是用vs2010编译,要复制对应的文件

~/redist/x86/Microsoft.VC100.CRT 目录下的两个文件:

msvcp100.dll

msvcr100.dll

<!--[if !supportLists]-->Ø  <!--[endif]-->Boost.python库引用

boost_python-vc100-mt-1_49.dll

boost_python-vc100-mt-1_49.lib

<!--[if !supportLists]-->Ø  <!--[endif]-->py2exe c++嵌入python打包的bug

如果是C++嵌入python生成的library.zip中缺少一些文件,生成的程序会报丢失文件的错误 ImportError: No module named site

需要把python中的lab文件从新打包(C:\Python27\Lib

在c++文件中设置python的运行目录

#include <Windows.h>
#include <stdlib.h>
#include <stdio.h>

psdsftp::psdsftp(void)
	:m_pythonSftp("pythonsftp")
	,m_funSFTP   ("pythonSftp")
	,m_funUnCom  ("pythonTgz")
{
	// 得到当前可执行文件所在的目录
	char szPath[10240];
	GetModuleFileName(NULL, szPath, sizeof(szPath));

	char* p = strrchr(szPath, '\\');
	if (p == NULL)
	{
		printf("不能获得文件路径!\n");
		return ;
	}
	*p = 0;
	cout << szPath << endl;

	// 设定运行时的PATH
	std::string PATHS = szPath;
	std::string pathdlls = "sys.path.append(r'" + PATHS + "\\stdlib.zip')";
	std::string pathlib  = "sys.path.append(r'" + PATHS + "\\dlls')";
	cout << pathdlls << endl;
	cout << pathlib << endl;

	Py_Initialize();

	PyRun_SimpleString("import sys");
	PyRun_SimpleString(pathdlls.c_str());
	PyRun_SimpleString(pathlib.c_str());
 

 

 

 

分享到:
评论

相关推荐

    python sftp上传下载

    python sftp上传下载

    python sftp&ftp&ssh2

    标题 "python sftp&ftp&ssh2" 指涉的是使用Python编程语言进行SFTP(Secure File Transfer Protocol)、FTP(File Transfer Protocol)以及SSH2(Secure Shell version 2)的相关操作。SFTP是基于SSH协议的安全文件...

    python sftp上传下载文件应用案例.py

    通过配置文件链接sftp服务器,下载指定文件,上传指定文件,常常用于更新服务器指定资源。

    Python实现可配置的sftp传输

    该资源为python实现可配置的sftp传输,get和put 配置文件为.ini文件;put和get区分一下源和目的路径,基本配置项即说明如下: [ftp]:ftp基本信息 [common] 公共的配置 如日志信息,传输模式,是否递归,是否删除等 ...

    python实现断文件点续传

    Python作为一种高级编程语言,因其简洁明了的语法和强大的库支持,常被用于网络编程,包括文件的断点续传功能。断点续传是一种允许用户在中断网络传输后从上次中断的位置继续传输的技术,对于大文件的上传和下载尤其...

    Python使用sftp实现上传和下载功能(实例代码)

    ### Python使用SFTP实现上传和下载功能详解 在IT领域,数据传输是一项极其重要的任务,尤其是在需要跨系统、跨平台进行文件交换时。SFTP(Secure File Transfer Protocol,安全文件传输协议)是一种基于SSH(Secure...

    Python基于sftp及rsa密匙实现远程拷贝文件的方法

    ### Python基于SFTP及RSA密钥实现远程拷贝文件的方法 在现代软件开发与运维工作中,经常需要在不同的服务器间传输文件。为了提高安全性并简化操作流程,许多开发者选择使用SSH(Secure Shell)协议下的SFTP(Secure...

    Sftp文件上传demo

    下面我们将以Python为例,演示一个简单的SFTP文件上传过程: 1. 安装`paramiko`库: ``` pip install paramiko ``` 2. 创建SFTP连接: ```python import paramiko ssh = paramiko.SSHClient() ssh.set_...

    python paramiko+pycrypto

    总的来说,Python的Paramiko库结合PyCrypto模块,为开发者提供了强大且灵活的SSH和SFTP功能,使得在Python中进行远程操作变得更加便捷和安全。在实际项目中,你需要根据具体需求对这些功能进行组合和定制,以满足...

    simple-sftp:基于ssh2-python包的简单SFTP python客户端

    **简单SFTP Python客户端——simple-sftp** 在Python编程中,`simple-sftp`是一个基于`ssh2-python`库的轻量级SFTP(Secure File Transfer Protocol)客户端实现。SFTP是SSH(Secure Shell)协议的一部分,用于在不...

    python 文件同步上传

    在这个场景中,Python 提供了一些强大的库来实现这样的功能,比如 `paramiko` 和 `sshtunnel`,它们支持 SSH(Secure Shell)协议,而 SFTP(Secure File Transfer Protocol)是基于 SSH 的一种安全文件传输方式。...

    Python库 | ssh2_python-0.15.0-cp34-cp34m-win32.whl

    **Python库 ssh2_python介绍** `ssh2_python`是一个基于Cython编写的Python库,它提供了SSH2协议的实现,允许用户在Python环境中进行安全的远程登录、文件传输和其他相关操作。这个库是Python开发者在处理远程...

    基于Python实现FTP文件上传与下载操作(FTP&SFTP协议)

    在Python编程中,我们可以使用内置的`ftplib`库来处理FTP协议的操作,而`paramiko`库则提供了对SFTP协议的支持。接下来我们将深入探讨这两个库的使用方法。 **使用`ftplib`实现FTP协议文件上传与下载** 首先,确保...

    Python库 | pytest-sftpserver-1.3.0.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:pytest-sftpserver-1.3.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    python 实现断点续传

    自己用python写的断点续传脚本

    python paramiko

    Python Paramiko库是一个强大的工具,用于在Python中实现SSHv2协议,主要用于远程控制和文件传输。这个库允许开发者在不直接使用操作系统命令的情况下,安全地执行命令、管理文件系统和进行网络设备配置。Paramiko...

    windows环境下python与linux交互

    在Windows环境中,Python作为一种强大的脚本语言,常常需要与Linux系统进行交互,特别是在自动化运维、分布式计算或跨平台数据处理的场景下。Paramiko库是Python中的一个SSH(Secure Shell)客户端和服务器实现,它...

    FileZilla FTP客户端 支持IPv4和IPv6登陆

    此外,它还支持多种FTP协议变种,如FTPS(FTP over TLS/SSL)和SFTP(SSH File Transfer Protocol),为用户提供安全的数据传输保障。 在FileZilla中,用户可以创建多个站点配置,保存登录信息和传输设置,便于管理...

    python调用SSH命令

    Python调用SSH命令主要涉及到的是远程控制和自动化执行任务的技术,这里主要介绍如何使用Python的Paramiko库来实现SSH连接并执行命令。Paramiko是一个强大的、完全实现了SSH2协议的Python模块,支持加密和认证等功能...

Global site tag (gtag.js) - Google Analytics