# How can I get the RUN button in Visual Studio Code to turn GREEN again?

Gold Member
Summary:
One python file seems to have broken itself and others
I have been using Visual Studio Code for a couple months now and it has been fine. When I want to run some code, there is usually a little green triangle button in the top right corner that I can click on. A few days ago, that triangle turned white only for Python files (it is still green for Latex files). I posted some pictures below.

It is also exhibiting strange behavior. The project I am working on involves creating multiple versions of math worksheets on various topics for my students. I have a bunch of latex worksheet templates and a "master" python file which reads the latex templates and then writes a new file with different numbers for each problem. Everything was working fine until recently. Now, when I run the master python file, it might work a couple times but eventually it stops working and clicking on the white run button does nothing.

When this happens, all other python files that I try opening stop working as well and my only recourse is to shut down Visual Studio Code and reopen it, hoping for another couple good runs before it all breaks again. Any ideas would be appreciated. I've already tried already restarting Visual Studio Code, restarting my computer, and uninstalling and reinstalling Visual Studio Code. I also tried running everything on my other computer at work and the same thing happens. Thank you!

Edit: I noticed something which might be a clue. I have a "make_worksheet" function which should generate as many versions of a worksheet as I want. After a couple run throughs with everything working, the bad attempt will always be bad in the same way. It will generate a few versions of the worksheet (not as many as I put in) and the last line of the latex file is always \newpage.

#### Attachments

• white triangle.PNG
27.1 KB · Views: 13
• green triangle.PNG
22 KB · Views: 13
Last edited:

Mark44
Mentor
Here is something to try:

At the top of your code, add this line -- import sys
Add this as the last line -- sys.exit()

I believe that the reason the triangle doesn't turn green is that your Python script isn't returning control back to the operating system. By importing the sys module and calling its exit() method, that should signal VS Code that your program has finished.

anorlunda
Staff Emeritus
The obvious first question to ask, "Have you tried rebooting?"

phinds
Gold Member
Hi @Mark44. Thanks for the help. Unfortunately I'm still seeing the same behavior. It ran a couple times then stopped. I noticed something which might be a clue. I have a "make_worksheet" function which should generate as many versions of a worksheet as I want. After a couple run throughs with everything working, the bad attempt will always be bad in the same way. It will generate a few versions of the worksheet (not as many as I put in) and the last line of the latex file is always \newpage.

Gold Member
The obvious first question to ask, "Have you tried rebooting?"
I have, yes.

pbuk
Gold Member
The Python debugger in VS Code (or for that matter any IDE) is designed for debugging, not live runs against large datasets and/or spawning multiple external processes. I won't go into the technology of how VS Code does that (unless somebody asks really nicely :D), but in essence because of the way Python works it is a bit of a kludge.

So develop, test and debug your program using a couple of simple structures, and then when you are done do a test run with the full dataset from the command prompt with python master.py.

Gold Member
...do a test run with the full dataset from the command prompt with python master.py.
Hello again @pbuk :) . I seem to be having the same problem even in the command prompt (except for the fact that running the master file from the command prompt did not stop other python files from working in vscode). Below are pictures of what's going on. I called my make_worksheet function to make 12 copies of the "fractions intro" worksheet and name it "attempt 34". I typed python master.py in the command prompt and then tried viewing the generated latex file in vscode (should I not have done that?). As you might be able to make out from the third picture below if you squint hard enough, I got 2 versions of the worksheet as opposed to the requested 12. Again, the latex file stopped at a \newpage (every worksheet template ends with \newpage). It did not go any further than that and it did not pull my "template - end.tex" file which is just a .tex file that has \end{document} written on it which I need to complete the created attempt file.

I also noticed that in the command prompt, I am not able to enter any new commands unless I exit and open it up again.

#### Attachments

• master pic.PNG
5.4 KB · Views: 12
• command prompt.PNG
4 KB · Views: 13
• worksheet pic.PNG
37.9 KB · Views: 13
pbuk
Gold Member
Sounds like in attempting to create 12 output files you are spawning 12 processes which are not terminating properly. Are you running tex2pdf or similar as part of this process?

DaveC426913
Gold Member
Am working on a fix in Photoshop.

Plz attach full-size uncompressed screenshot.

pbuk
Gold Member
Also I notice that you are working on this in a Dropbox folder; that is probably not a good idea as Python will be competing with Dropbox for handles for the files. Probably best to do all development work in a folder that does not have any kind of live backup (or any backup at all - you are using git?)

pbuk
Gold Member
Here is something to try:

At the top of your code, add this line -- import sys
Add this as the last line -- sys.exit()

I believe that the reason the triangle doesn't turn green is that your Python script isn't returning control back to the operating system. By importing the sys module and calling its exit() method, that should signal VS Code that your program has finished.
No, you don't need sys.exit or anything else, a Python script terminates at the end of the file.

Gold Member
Sounds like in attempting to create 12 output files you are spawning 12 processes which are not terminating properly. Are you running tex2pdf or similar as part of this process?
No, I'm not. Should I be? Here are some pics of the make_worksheet function if it's helpful.

#### Attachments

• Screenshot (1).png
47.7 KB · Views: 13
• Screenshot (2).png
57.1 KB · Views: 14
• Screenshot (3).png
55.5 KB · Views: 14
Gold Member
Am working on a fix in Photoshop.

Plz attach full-size uncompressed screenshot.

Thanks for the help, @DaveC426913. What exactly do you need a screenshot of?

Last edited by a moderator:
Gold Member
Also I notice that you are working on this in a Dropbox folder; that is probably not a good idea as Python will be competing with Dropbox for handles for the files. Probably best to do all development work in a folder that does not have any kind of live backup (or any backup at all - you are using git?)

I'm not using git. In fact, although I've heard it mentioned over and over, I'm not really quite sure what it is. I suppose my next step should be to look into it. Dropbox is where I've been keeping all my important files for many years. Guess I'll have to make a change.

pbuk
Gold Member
Dropbox (and Google Drive, MS OneDrive etc.) is fine for a typical document that you work on and save (or autosave) every few minutes. When you are developing software (not so much Python admittedly), the compiler and debugger may create many temporary files in your working directory. This confuses Dropbox.

Thanks for the help, #DaveC426913. What exactly do you need a screenshot of?
I think @DaveC426913 was trying to make a joke.

No, I'm not [spawning external processes]. Should I be? Here are some pics of the make_worksheet function if it's helpful.
No, you don't want to spawn tex2pdf processes in any big loops, that could only make things worse. You are opening and closing files a bit more than is ideal, but you do seem to be closing them properly and you are not running multiple copies of the program simultaneously so I can't see any obvious problem.

Oh unless your gen_times_tables etc. functions are causing some recursion? I assume these set the global variables which you then substitute in: this is horrible, as is the hard coding of variable names for substitution (you could replace all of this with functions that return a dict with the keys as the placeholder text and the values the text to substitute), and you don't need the up_to variable, you can just use the length() of the relevant dict.

SamRoss
Gold Member
Oh unless your gen_times_tables etc. functions are causing some recursion? I assume these set the global variables which you then substitute in: this is horrible, as is the hard coding of variable names for substitution (you could replace all of this with functions that return a dict with the keys as the placeholder text and the values the text to substitute), and you don't need the up_to variable, you can just use the length() of the relevant dict.

Yes, that is what I've been doing. I do have a heck of a lot of global variables which did seem awkward to me. I'll try the dictionary strategy and let you know how it goes.

pbuk