设为首页 收藏本站
查看: 757|回复: 0

[经验分享] python sftp

[复制链接]

尚未签到

发表于 2017-4-20 12:52:33 | 显示全部楼层 |阅读模式
  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());

 
 
 
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-366932-1-1.html 上篇帖子: Python 启航 下篇帖子: Python 手册
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表