How do i watch python source code files and restart when i save?

PythonNodemon

Python Problem Overview


When I save a python source code file, I want to re-run the script. Is there a command that works like this (sort of like nodemon for node)?

Python Solutions


Solution 1 - Python

While there are probably ways to do this within the python ecosystem such as watchdog/watchmedo ( https://github.com/gorakhargosh/watchdog ), and maybe even linux scripting options with inotifywait ( https://linux.die.net/man/1/inotifywait ), for me, the easiest solution by far was... to just use nodemon! What I didn't know is that although the github tagline of nodemon is "Monitor for any changes in your node.js application and automatically restart the server - perfect for development" actually nodemon is a delicously generic tool and knows that .py files should be executed with python for example. Here's where I think the magic happens: https://github.com/remy/nodemon/blob/c1211876113732cbff78eb1ae10483eaaf77e5cf/lib/config/defaults.js

End result is that the command line below totally works. Yay!

$ nodemon hello.py
[nodemon] starting `python hello.py`

Solution 2 - Python

You can install nodemon to watch for file changes.

e.g.

npm i -g nodemon

Then to use:

nodemon --exec python3 hello.py 

This is for when you use python3 in the command line. On windows you can also use 'py' instead.

Solution 3 - Python

The most similar way to nodemon I found is by using the watchdog package:

pip install watchdog

This comes with a utility called watchmedo:

watchmedo shell-command \
 --patterns="*.py" \
 --command='python "${watch_src_path}"' \
 .

Now just work on your .py and it will be executed every time you save the file.

Solution 4 - Python

I just use npx nodemon pythonfile.py and it works.Make sure you are using nodemon v2.0.x or above

Solution 5 - Python

You actually can use nodemon with python, from their docs:

> Running non-node scripts nodemon can also be used to execute and > monitor other programs. nodemon will read the file extension of the > script being run and monitor that extension instead of .js if there's > no nodemon.json: > > nodemon --exec "python -v" ./app.py > > Now nodemon will run app.py with python in verbose mode (note that if > you're not passing args to the exec program, you don't need the > quotes), and look for new or modified files with the .py extension.

https://github.com/remy/nodemon#running-non-node-scripts

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionbkinsey808View Question on Stackoverflow
Solution 1 - Pythonbkinsey808View Answer on Stackoverflow
Solution 2 - PythonJosh DandoView Answer on Stackoverflow
Solution 3 - PythonJon PortellaView Answer on Stackoverflow
Solution 4 - PythonprometheusView Answer on Stackoverflow
Solution 5 - PythonJon PortellaView Answer on Stackoverflow