保存时自动运行python代码

zdwk9cvp  于 2023-04-28  发布在  Python
关注(0)|答案(3)|浏览(132)

有没有一种方法可以自动观看python脚本文件,并在每次保存时在tmux/screen中执行?我主要在vim工作,每次我想评估代码时,它都会在新窗口中打开,所以它有点破坏工作流程。我问这个问题是因为我也在Scala工作,而sbt构建工具有一个非常简洁的选项来做这个(保存时运行编译器/REPL)

o7jaxewo

o7jaxewo1#

如果每次我保存py文件时,它都会自动执行,这将是令人讨厌的。因为你可以编辑一个py文件,所以只需要py类。或纯配置的东西。不管怎样,如果你想这样做,你可以试试:

autocmd FileWritePost *.py exec '!python' shellescape(@%, 1)

我的vimrc中有:

autocmd FileType python call AutoCmd_python()

fun! AutoCmd_python()
        "setlocal other options for python, then:
    nnoremap <buffer> <F9> :exec '!python' shellescape(@%, 1)<cr>

endf

现在你可以手动的按<F9>来测试你当前的python文件。

8tntrjer

8tntrjer2#

正如sean和肯特所建议的,最简单的方法是让vim驱动它。
但是,如果你只“大部分”在vim中工作,那可能不太合适。
唯一的另一种选择是编写使用平台的文件系统监视API的代码,或者,如果最坏的情况是,定期轮询文件,并在每次更新时运行它。然后在screentmux下运行该代码(假设在另一个screen窗口中使用vim)。
因为我不知道你的平台,所以我会写一个愚蠢的轮询实现来展示这个想法--只要记住,在真实的生活中,你最好使用像inotifywatch/fswatch/etc这样的工具。:

import os
import subprocess
import sys
import time

scripts = sys.argv[1:]
mtimes = {script: os.stat(script).st_mtime for script in scripts}
while True:
    for script in scripts:
        mtime = os.stat(script).st_mtime
        if mtime != mtimes[script]:
            subprocess.call([script], shell=True)
            mtimes[script] = mtime
    time.sleep(250)

现在,你可以这样做:

$ screen
$ python watch.py myscript.py
$ ^AS^A<Tab>^A^C
$ vim myscript.py
l5tcr1uw

l5tcr1uw3#

你可以使用nodemon。
npm i -g nodemon
然后用nodemon监视文件以自动运行它
nodemon --exec python main.py
您还可以在每次执行时清除屏幕。

from os import system
system('clear')

相关问题