爱意满满的作品展示区。
Contextualist

shx: 用 Python 写脚本的利器

  •  
  •   Contextualist ·
    Contextualist · May 13, 2021 · 3912 views
    This topic created in 2001 days ago, the information mentioned may be changed or developed.

    最近看到 zx,就是那个用 js 写脚本的封装。用上手感觉是不错,但觉得 js 的语法糖不够甜,特别是 Array 的处理。于是乎就照着它的哲学移植到了 Python 上,用法差别不大,就照 asyncio 那套走就行。借用 zx 的示例:

    #!/usr/bin/env shx
    
    await $"cat setup.py | grep name"
    
    branch = (await $("git branch --show-current", capture=True)).stdout
    await $f"dep deploy --branch={branch}"
    
    await gather(
      $"sleep 1; echo 1",
      $"sleep 2; echo 2",
      $"sleep 3; echo 3",
    )
    
    name = "foo bar"
    await $f"mkdir /tmp/{Q(name)}"
    

    $ 符号是用 tokenize 替换的,比较中规中矩吧,大概。(嗯因为我之前试过用 forbiddenfruit 之流的,总有些复杂的情况会 segfault) 然后这也是 Python 里的非法字符,还自带显眼的红色语法高亮呢(逃

    目前项目没有任何依赖,请自带 httpx、requests、colorama、termcolor 什么的。

    匆匆忙忙写的,可能有些 bug 。不过我自己已经用上了,爽就完事儿了。

    项目: https://github.com/Contextualist/shx

    9 replies  •  2021-05-18 18:11:12 +08:00
    billzhuang
    billzhuang
    May 13, 2021
    1
    牛逼!
    ch2
    ch2
    May 13, 2021 via iPhone
    2
    但是,Python 本身就是很好的脚本了
    duhb
    duhb
    May 13, 2021 via iPhone
    3
    就这?用 python 或 js 本身就挺好
    clino
    clino
    May 13, 2021❤️2
    4
    我本来最讨厌 hell perl 这种有 $ 的语言,所以写脚本偏好用 python,然后你又在 python 里把$给整了出来,这个让我觉得一阵恶心,觉得 python 被 shell 污染到的样子。。。
    Contextualist
    Contextualist
    OP
    May 13, 2021
    5
    @ch2 对,Python 的 pathlib 和 shutil 已经可以进行大部分的文件操作了,但主要是调用外部命令不算方便:subprocess.run 需要预设一些参数,asyncio 的 subprocess 更是缺少一些高级封装。如果拿来日常使用还是需要写一些重复代码的。
    abersheeran
    abersheeran
    May 13, 2021
    6
    @Contextualist 以前我也觉得 subprocess.run 不好用。某天我想起来 subprocess 下的 check_call 和 check_output,试了一下,好用的很。
    Contextualist
    Contextualist
    OP
    May 13, 2021
    7
    @abersheeran 感谢提出,这两个接口是可以覆盖挺多场景。其实我自己的主要用途还是需要封装异步的接口。
    然后又仔细拜读了一下文档,发现 check_call 和 check_output ( python 3.1 )竟然是先于 subprocess.run ( python 3.5 )的,看来官方倾向于整合成一个高级接口,算是牺牲便捷换取风格统一吧。
    WillBC
    WillBC
    May 14, 2021 via iPhone
    8
    ruby 早就自带了这个东西
    sinux
    sinux
    PRO
    May 18, 2021
    9
    对楼主的这个 repo 不评价。
    但是楼上说 zx 没用的....建议把 zx 再好好看看,然后再喷
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5189 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 06:37 · PVG 14:37 · LAX 22:37 · JFK 01:37
    ♥ Do have faith in what you're doing.