保存时自动运行python代码
Posted
技术标签:
【中文标题】保存时自动运行python代码【英文标题】:Automatically run python code on save 【发布时间】:2013-10-05 23:22:46 【问题描述】:有没有办法在每次保存时自动观看 python 脚本文件并在 tmux/screen 中执行它?我主要在 vim 中工作,每次我想评估它在新窗口中打开的代码时,它都会破坏工作流程。我问这个是因为我也在 Scala 中工作,并且 sbt 构建工具有非常好的选择来做到这一点(在保存时运行编译器/REPL)
【问题讨论】:
如果你在 vim 中工作,为什么不为 save 函数写一个别名呢?比如代替 :w 你做 :pyw (python 保存),然后在保存时运行代码?同样在 VIM 中它不应该打开一个新窗口,至少它不会在我的开发机器上。 您是否在screen
窗口中运行vim
,并希望在父screen
内的新窗口中运行Python 脚本?
我使用名为 ScreenShell 的插件,它在 vim 旁边运行一个 tmux 窗口,所有这些都在全局 tmux 实例中。它只是在其中创建一个拆分窗口。
我喜欢 ctrl-z 让编辑器在后台运行,然后手动运行。
How can I automatically evaluate a script and put the results into an existing window after saving in Vim? 的可能重复项
【参考方案1】:
如果每次我保存一个 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 文件。
【讨论】:
【参考方案2】:按照肖恩和肯特的建议,最简单的方法是让vim
驱动它。
但是,如果您只“主要”在 vim 中工作,那可能不合适。
唯一的另一种选择是编写使用您平台的文件系统监视 API 的代码,或者,如果最糟糕的情况出现,定期轮询文件,并在每次更新时运行它。然后只需在您的screen
或tmux
下运行该代码(可能在另一个screen
窗口中使用vim
)。
由于我不了解您的平台,我将编写一个愚蠢的轮询实现来展示这个想法 - 请记住,在现实生活中,使用像 inotifywatch
/fswatch
这样的工具会更好/等:
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
【讨论】:
我主要在 linux 上工作,而 fswatch 正是我想要的。非常感谢您的帮助 @deprofundis:等等,Linux 上有一个叫fswatch
的东西?我什至不知道……我建议为 OS X 使用 fswatch
,为 linux 建议 inotifywatch
(或者可能像 gamin
或 libfam
端口之类的包装器,我忘记了它的名称,希望有工具在每个平台上都一样)。但是,如果有一个 linux fswatch
,并且它可以满足您的需求……好吧,即使我偶然得到它,我也会接受。 :)
我的意思是 inotifywatch , fswatch 只能在 Mac 上使用,抱歉。以上是关于保存时自动运行python代码的主要内容,如果未能解决你的问题,请参考以下文章
测试人员如何使用Python代码把自动化测试的数据保存下来进行操作呢?