V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
youthfire
V2EX  ›  Python

Python 远程复制文件(局域网内另一台 Mac 到本 Mac)始终不成功

  •  
  •   youthfire · 2020-07-24 22:55:11 +08:00 · 2589 次点击
    这是一个创建于 1608 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求:同一局域网目标服务器 Mac 名是 tommac,用户 tom,ip:192.168.50.4,本地服务器 Mac 名是 jasonmac,用户 jason.需要把 /Users/tom/Documents/working/purchase.xlsx 复制到 /Users/jasonmac/Documents/working

    尝试了 pysmb 和 paramiko 两个库

    前者报 not connected,后者报 Error reading SSH protocol banner.总之就是各种连接不上目标服务器.(确认目标服务器已经打开共享,并且在网络里可以访问) 同时我也有点搞不清楚,mac 的计算机名到底应该是 jason 这种,还是 jason.local,似乎尝试了也都错.端口不管是官网范例的 139,还是很多人用的 445 都不行.

    stackoverflow 上看了好半天都研究不出,有没有熟悉的朋友说下可能的原因?或者推荐下自己熟悉的库 预先感谢大家!

    下面是 pysmb 时候的一段代码(import 部分忽略)

    share_name = "jason" user_name = "jason" password = "57777" local_machine_name = "tommac" server_machine_name = "jasonmac" server_ip = "192.168.50.4"

    conn = SMBConnection(user_name, password, local_machine_name, server_machine_name, use_ntlm_v2=True) assert conn.connect(server_ip, 139) print('connected')

    file_obj = tempfile.NamedTemporaryFile() file_name = file_obj.name file_attributes, copysize = conn.retrieveFile(share_name, "/Documents/working/purchase.xlsx", file_obj) print(copysize) file_obj.close() shutil.copy(file_name, "/Users/tom/Documents/working/purchase.xlsx") conn.close()

    第 1 条附言  ·  2020-07-25 21:05:37 +08:00
    最后找到了原因.因为代码有部分内容需要连 google drive,所以全局使用了 socks 代理.把代理部分作非全局化处理后,成功传输.用的 paramiko,速度很快,必要参数也比 pysmb 少
    14 条回复    2020-07-25 12:06:14 +08:00
    epicnoob
        1
    epicnoob  
       2020-07-24 23:02:06 +08:00   ❤️ 1
    python -m http.server 6666
    polaa
        2
    polaa  
       2020-07-24 23:16:06 +08:00
    不是很懂目的是什么。。。。scp 不行么
    leimao
        3
    leimao  
       2020-07-24 23:17:47 +08:00 via iPhone
    asyncssh 用一下
    plko345
        4
    plko345  
       2020-07-24 23:22:39 +08:00 via Android
    那你到底用什么协议,又是 ssh 又是 smb 的,为什么要同时用,有测试过可用吗?
    youthfire
        5
    youthfire  
    OP
       2020-07-24 23:24:42 +08:00 via iPhone
    @plko345 #4 平时都是 smb,搞不出就一顿乱试了。主要是 python 中一段自动化需要经常从目标机器拷贝一个文件,现在都是手动在下载。
    jimrok
        6
    jimrok  
       2020-07-24 23:25:06 +08:00
    rsync 不行吗?
    youthfire
        7
    youthfire  
    OP
       2020-07-24 23:33:14 +08:00
    @jimrok 是指用 subprocess 调用外部命令? 想用 py 相关的库解决.
    laminux29
        8
    laminux29  
       2020-07-24 23:50:02 +08:00
    局域网文件拷贝,直接 tcp 不香吗,干嘛要整 pysmb 或 paramiko 。
    youthfire
        9
    youthfire  
    OP
       2020-07-24 23:57:36 +08:00
    @laminux29 从来没有接触过,我去查查学习下,谢谢
    renmu123
        10
    renmu123  
       2020-07-25 10:07:40 +08:00 via Android
    paramiko 走得是 ssh,文件传输是 sftp,你试试看能不能通过一台电脑 ssh 到另一台电脑
    lolizeppelin
        11
    lolizeppelin  
       2020-07-25 10:10:47 +08:00
    文件传输 l 老老实实调用 shell 才是正道,因为 python 太慢了,ssh 协议这种有加密解密的更慢

    除非有比较特殊的文件过滤机制必须在代码里,才考虑用 python 写传输过程
    xyjincan
        12
    xyjincan  
       2020-07-25 10:28:21 +08:00   ❤️ 1
    python 起个 http 服务啊
    aladdindingding
        13
    aladdindingding  
       2020-07-25 11:34:05 +08:00
    @lolizeppelin python 表示不背慢这个锅
    youthfire
        14
    youthfire  
    OP
       2020-07-25 12:06:14 +08:00
    @renmu123 谢谢提醒! 我检查了 sharing 设置,打开了 file sharing,但原来还有个 remote login 控制 ssh 部分. 回头我再试下去.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2641 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:19 · PVG 23:19 · LAX 07:19 · JFK 10:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.