Python parallel-ssh 这个库实现 os.walk 怎么做有人知道吗? - V2EX
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
simple2025
0D
V2EX    Python

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

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

    如题

    没有找到例子

    28 条回复    2022-10-21 22:16:53 +08:00
    ysc3839
        1
    ysc3839  
       2022-10-21 15:20:39 +08:00
    执行 find 命令然后解析输出不行吗?
    simple2025
        2
    simple2025  
    OP
       2022-10-21 15:38:32 +08:00
    @ysc3839 要这么暴力吗?
    ysc3839
        3
    ysc3839  
       2022-10-21 15:51:04 +08:00
    @chenqh os.walk 不也是这样吗?
    simple2025
        4
    simple2025  
    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 啥意思?
    simple2025
        6
    simple2025  
    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 等命令输出的。
    simple2025
        10
    simple2025  
    OP
       2022-10-21 18:34:28 +08:00
    @Shazoo 痛苦
    simple2025
        11
    simple2025  
    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 的么
    simple2025
        13
    simple2025  
    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 所以还是换思路吧... 不知道原始需求没法替你着急了, 加油哈哈
    simple2025
        15
    simple2025  
    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 所以这本身不是一个同步软件该干的事么, 为啥要自己写... 自己搞增量同步远不如现成的软件啊, 拉个桥接到同网段里, 秒级同步的
    simple2025
        17
    simple2025  
    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, 查了好久才发现是共享盘性能不行...)
    byte404
        19
    byte404  
       2022-10-21 21:42:18 +08:00 via Android
    你可以用 inotify+rsync 实现
    simple2025
        20
    simple2025  
    OP
       2022-10-21 21:42:27 +08:00
    @ClericPy 大哥,我用的 vagrant 啊,而且 virtualbox 有时候挂不成功啊,我也不知道为什么,所以我就没有挂在那里了,还有我的文件夹不在那个地方啊,我记得 vagrant 好像是默认挂在 /vagrant 这里,但是我的习惯是代码放在 /home/vagrant 下面
    simple2025
        21
    simple2025  
    OP
       2022-10-21 21:43:48 +08:00
    @Aumujun 我是实体机是 windows,虚拟机是 linux 这种搞不定的吧 inotify+rsync
    simple2025
        22
    simple2025  
    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 了下还挺多人跟你一样没挂上的...
    simple2025
        25
    simple2025  
    OP
       2022-10-21 21:53:25 +08:00
    @LindsayZhou 感觉应该快不了了,我都是用的 listdir_attr 以前 listdir 那种更慢
    simple2025
        26
    simple2025  
    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
    好吧... 别忘了增量同步~
    simple2025
        28
    simple2025  
    OP
       2022-10-21 22:16:53 +08:00
    @ClericPy 已经增量同步了,不然的话,现在同步一次要 10 分钟
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1034 人在线   最高记录 6679    
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms
    UTC 18:45 PVG 02:45 LAX 10:45 JFK 13:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86