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
chenqh
V2EX  ›  Python

Python parallel-ssh 这个库实现 os.walk 怎么做有人知道吗?

  •  
  •   chenqh · 2022-10-21 13:34:17 +08:00 · 2122 次点击
    这是一个创建于 546 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题

    没有找到例子

    28 条回复    2022-10-21 22:16:53 +08:00
    ysc3839
        1
    ysc3839  
       2022-10-21 15:20:39 +08:00
    执行 find 命令然后解析输出不行吗?
    chenqh
        2
    chenqh  
    OP
       2022-10-21 15:38:32 +08:00
    @ysc3839 要这么暴力吗?
    ysc3839
        3
    ysc3839  
       2022-10-21 15:51:04 +08:00
    @chenqh os.walk 不也是这样吗?
    chenqh
        4
    chenqh  
    OP
       2022-10-21 16:01:31 +08:00
    @ysc3839 os.walk 可以通过 os.list_dir 然后 os.path.stat 判断 dir 来做啊
    ysc3839
        5
    ysc3839  
       2022-10-21 16:03:43 +08:00
    @chenqh 啥意思?
    chenqh
        6
    chenqh  
    OP
       2022-10-21 16:57:40 +08:00
    @ysc3839 os.walk 其实可以通过 os.listdir, 然后获取 stat 来做
    Shazoo
        7
    Shazoo  
       2022-10-21 17:24:21 +08:00
    这个 ssh 库只支持 scp 和 sftp 的 copy 文件操作,其他都没实现。
    所以,没有什么好办法去做这事。

    1 楼说的就是很优的解了,不过也得考虑目标机器没有 find 命令的情况----好比对面是个 busybox……

    你还是老老实实的解析 ls 吧,这个基本没啥问题。
    ysc3839
        8
    ysc3839  
       2022-10-21 17:35:25 +08:00
    @chenqh 你的意思是要拿到路径的同时拿到 stat ?那可以再调用 stat 命令,或者根据需求调整 find 的参数提前过滤
    ysc3839
        9
    ysc3839  
       2022-10-21 18:02:45 +08:00
    @Shazoo 解析 ls 也是可以的方案,印象中 SSH 的 SCP 协议列举文件就是解析 ls 等命令输出的。
    chenqh
        10
    chenqh  
    OP
       2022-10-21 18:34:28 +08:00
    @Shazoo 痛苦
    chenqh
        11
    chenqh  
    OP
       2022-10-21 18:34:48 +08:00
    @ysc3839 我想要他提供 API 来搞,去掉 issue 试试
    ClericPy
        12
    ClericPy  
       2022-10-21 20:35:37 +08:00
    呃, 如果远程 tree 之类的命令 > 到一个文件然后把文件拉下来咋样(或者直接从 ssh 传回来)... 平时很少折腾这种事, 这库没用过, 类似 fabric ansible 的么
    chenqh
        13
    chenqh  
    OP
       2022-10-21 20:55:08 +08:00
    @ClericPy 我用 paramiko 写了一版,能走通,但是太慢了,遍历一遍所有文件夹大概要 36-40s
    ClericPy
        14
    ClericPy  
       2022-10-21 20:56:57 +08:00
    @chenqh 所以还是换思路吧... 不知道原始需求没法替你着急了, 加油哈哈
    chenqh
        15
    chenqh  
    OP
       2022-10-21 21:25:56 +08:00
    @ClericPy 原始需求就是我有一个 virtualbox,我要通过 sftp 里面把一些文件夹自动下载到 windows 下面,同步到最新状态,

    自动下载到 windows 的作用,我有另外一 py 脚本来做备份,这就是我的需求
    ClericPy
        16
    ClericPy  
       2022-10-21 21:28:25 +08:00
    @chenqh 所以这本身不是一个同步软件该干的事么, 为啥要自己写... 自己搞增量同步远不如现成的软件啊, 拉个桥接到同网段里, 秒级同步的
    chenqh
        17
    chenqh  
    OP
       2022-10-21 21:31:18 +08:00
    @ClericPy 当时没有找到,或者说我不会用
    ClericPy
        18
    ClericPy  
       2022-10-21 21:37:21 +08:00
    @chenqh 大哥... 我被你带沟里了... VBOX 直接挂个共享目录啊, 我在公司里就这么挂的...

    共享目录基本没啥大问题, 编码问题目前没遇到过, 少数奇葩文件提前删了也没事, 唯一不好使的就是如果频繁读写可能有点扛不住(2000QPS 写日志瓶颈了结果只有 100 多 QPS, 查了好久才发现是共享盘性能不行...)
    Aumujun
        19
    Aumujun  
       2022-10-21 21:42:18 +08:00 via Android
    你可以用 inotify+rsync 实现
    chenqh
        20
    chenqh  
    OP
       2022-10-21 21:42:27 +08:00
    @ClericPy 大哥,我用的 vagrant 啊,而且 virtualbox 有时候挂不成功啊,我也不知道为什么,所以我就没有挂在那里了,还有我的文件夹不在那个地方啊,我记得 vagrant 好像是默认挂在 /vagrant 这里,但是我的习惯是代码放在 /home/vagrant 下面
    chenqh
        21
    chenqh  
    OP
       2022-10-21 21:43:48 +08:00
    @Aumujun 我是实体机是 windows,虚拟机是 linux 这种搞不定的吧 inotify+rsync
    chenqh
        22
    chenqh  
    OP
       2022-10-21 21:45:59 +08:00
    @ClericPy 我记起来 vagrant 的 image 是 centos7 的时候,挂不了共享目录
    LindsayZhou
        23
    LindsayZhou  
       2022-10-21 21:49:10 +08:00
    AsyncIO 应该会快很多吧,AsyncSSH 的 issue 里有人提过差不多的问题:

    https://github.com/ronf/asyncssh/issues/332#issuecomment-748533577
    ClericPy
        24
    ClericPy  
       2022-10-21 21:49:20 +08:00
    @chenqh 我就 win 上 VBOX 装了个 manjaro, 似乎好多年前我挂 Ubuntu 不知道啥原因也没挂上过... 这次不知道为啥挂的挺顺利的, win 上随便个目录挂 manjaro 里的 / 上, 忘记改没改权限了, 下班了电脑不在手边, 感觉你好难啊

    先尽量处理一下挂载失败的问题吧, 没报错日志啥的么, 还是没勾选自动挂载或者中文目录啥的.

    反正我不喜欢 WSL2, 然后 multipass 也没 GUI, 现在 VBOX 用着凑合了, 鼠标手势没法用其他跑 docker 和 VSCODE 啥的还是挺开心的. 可惜本来想 linux 里开 VBOX 的 win10 来着, 结果公司不让用没激活的系统

    vagrant 我没用过, 随手 Google 了下还挺多人跟你一样没挂上的...
    chenqh
        25
    chenqh  
    OP
       2022-10-21 21:53:25 +08:00
    @LindsayZhou 感觉应该快不了了,我都是用的 listdir_attr 以前 listdir 那种更慢
    chenqh
        26
    chenqh  
    OP
       2022-10-21 21:54:55 +08:00
    @ClericPy 挂不上就不管了,我刚刚又发现我程序的问题,现在 12K 文件夹,只要 25S 了, 其实感觉还是网络 IO 了,本地这些文件夹遍历一次只需要 3s 不到
    ClericPy
        27
    ClericPy  
       2022-10-21 22:05:38 +08:00
    好吧... 别忘了增量同步~
    chenqh
        28
    chenqh  
    OP
       2022-10-21 22:16:53 +08:00
    @ClericPy 已经增量同步了,不然的话,现在同步一次要 10 分钟
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   875 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 21:57 · PVG 05:57 · LAX 14:57 · JFK 17:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.