# NppExec can't call python script through shortcut?

• I tried to invoke a python script through NppExec plugin with these 2 lines below.
npp_save "D:\Notepad++_7.5.8\plugins\Config\PythonScript\scripts\someScript.py"
npp_menucommand "Plugins\Python Script\Scripts\someScript"

It worked fine.
But when I invoke this NppExec script by pressing Ctrl+F6, the script could not invoke the python script. But npp_save was successfully processed.
However, if I use mouse to click on Direct Execute Previous, instead of using shortcut, the python script was run successfully.

Then I tried to put that NppExec script under **Macro **menu and assigned it a shortcut. I was all the same. When I click it, it can invoke the python script. But when I call the NppExec script via shortcut, the python script doesn’t run.

Is it a bug of NppExec plug-in?

• @古旮

This doesn’t fit with the layout Plugins\Python Script\Scripts\someScript",
so I assume it is needed to bring the python script into the main pythonscript menu level.

Eko

• @Eko-palypse
The NppExec script is alright. It runs OK both in command line and when I click on Direct Execute Previous(Ctrl+F6). The problem is when I run the NppExec script by pressing shortcut, the second line(npp_menucommand "Plugins\Python Script\Scripts\someScript") of that NppExec script doesn’t run. Only the first line(npp_save "D:\Notepad++_7.5.8\plugins\Config\PythonScript\scripts\someScript.py" ) is run.

• Since you ask, my goal is just to save the python script file and run it within 1 shortcut.

• @古旮 said:

To be honest, this does not work for me but if someScript is located one folder up like
“Plugins\Python Script\someScript” then it works.

Nevertheless I’m still unsure what you try to do.
If you want to run python scripts with a locally installed python interpreter,
then I guess you should do it differently if using NppExec

Define something like this

NPP_SAVE
cd $(CURRENT_DIRECTORY) python.exe$(FULL_CURRENT_PATH)


Assuming that python can be found otherwise replace with full path to python.exe
This gives you also the benefit of being able to test different python interpreters
and you don’t need to hard code the path of the python script.

But if you want to execute python script via PythonScript plugin then I would say
do either import it or use exec/execfile with something like

from Npp import editor, notepad

def run(selectedCode):
if selectedCode:
print "running content from", _file
exec(editor.getTextRange(*editor.getUserCharSelection()))
else:
if editor.getLine(0).startswith("#NEW_NAMESPACE"):
print "running in own namespace",  _file
ns = {}
ns["__name__"] = "__main__"
exec(editor.getText(), ns, ns)
else:
print "running in current namespace",  _file
exec(editor.getText())

run(not editor.getSelectionEmpty())


and if you still want to save it before executing it, put a
notepad.save() before run(not editor.getSelectionEmpty())

Eko

• @Eko-palypse
Thank you for the reply. I tested again and still found the code works for me.
But there is one thing I forgot to mention in my original post.
When I call the NppExec script through shortcut(as opposed to mouse click), the command npp_menucommand "Plugins\Python Script\Scripts\someScript" still runs, but it doesn’t invoke the python script. Instead, it opens that *.py file in notepad++.
Only if I call the same NppExec script by mouse clicking on its menu item, or through NppExec console, will that line of NppExec command invoke the specified python script, as expected.
So, from my point of view, that must be a bug of NppExec. To be more specific, the npp_menucommand command’s bug.

Here’s my versions below, in case anyone with the same versions as mine can reproduce the same peoblem: