How to run a Python script inside another script and close itself immediately











up vote
-2
down vote

favorite












I have a login frame and a main frame that made from pyqt.
I want to run the main command after I clicked the button and when the main frame runs close the login frame.



I wrote a def for clicking button but when the command executed the main frame still waits until I close the main window.



This is the function of clicking the button:



def ButtonClicked(self):

os.system('py Main.py')
self.os.exit()


How can I make it close immediately and not wait for main.py to exit?










share|improve this question
























  • start "" py Main.py
    – Peter Wood
    Nov 20 at 10:47










  • i dont get it what is the start
    – ghostDs
    Nov 20 at 10:51










  • os.system('start "" py Main.py')
    – Peter Wood
    Nov 20 at 11:12










  • @PeterWood thanks alot it worked ,but i have a little bug that is when the os.system('start "" py Main.py') runs the console start but not comes popop. i should press it on taskbar to show
    – ghostDs
    Nov 20 at 11:28

















up vote
-2
down vote

favorite












I have a login frame and a main frame that made from pyqt.
I want to run the main command after I clicked the button and when the main frame runs close the login frame.



I wrote a def for clicking button but when the command executed the main frame still waits until I close the main window.



This is the function of clicking the button:



def ButtonClicked(self):

os.system('py Main.py')
self.os.exit()


How can I make it close immediately and not wait for main.py to exit?










share|improve this question
























  • start "" py Main.py
    – Peter Wood
    Nov 20 at 10:47










  • i dont get it what is the start
    – ghostDs
    Nov 20 at 10:51










  • os.system('start "" py Main.py')
    – Peter Wood
    Nov 20 at 11:12










  • @PeterWood thanks alot it worked ,but i have a little bug that is when the os.system('start "" py Main.py') runs the console start but not comes popop. i should press it on taskbar to show
    – ghostDs
    Nov 20 at 11:28















up vote
-2
down vote

favorite









up vote
-2
down vote

favorite











I have a login frame and a main frame that made from pyqt.
I want to run the main command after I clicked the button and when the main frame runs close the login frame.



I wrote a def for clicking button but when the command executed the main frame still waits until I close the main window.



This is the function of clicking the button:



def ButtonClicked(self):

os.system('py Main.py')
self.os.exit()


How can I make it close immediately and not wait for main.py to exit?










share|improve this question















I have a login frame and a main frame that made from pyqt.
I want to run the main command after I clicked the button and when the main frame runs close the login frame.



I wrote a def for clicking button but when the command executed the main frame still waits until I close the main window.



This is the function of clicking the button:



def ButtonClicked(self):

os.system('py Main.py')
self.os.exit()


How can I make it close immediately and not wait for main.py to exit?







python pyqt5






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 20 at 12:29









usr2564301

17.5k73270




17.5k73270










asked Nov 20 at 10:41









ghostDs

85




85












  • start "" py Main.py
    – Peter Wood
    Nov 20 at 10:47










  • i dont get it what is the start
    – ghostDs
    Nov 20 at 10:51










  • os.system('start "" py Main.py')
    – Peter Wood
    Nov 20 at 11:12










  • @PeterWood thanks alot it worked ,but i have a little bug that is when the os.system('start "" py Main.py') runs the console start but not comes popop. i should press it on taskbar to show
    – ghostDs
    Nov 20 at 11:28




















  • start "" py Main.py
    – Peter Wood
    Nov 20 at 10:47










  • i dont get it what is the start
    – ghostDs
    Nov 20 at 10:51










  • os.system('start "" py Main.py')
    – Peter Wood
    Nov 20 at 11:12










  • @PeterWood thanks alot it worked ,but i have a little bug that is when the os.system('start "" py Main.py') runs the console start but not comes popop. i should press it on taskbar to show
    – ghostDs
    Nov 20 at 11:28


















start "" py Main.py
– Peter Wood
Nov 20 at 10:47




start "" py Main.py
– Peter Wood
Nov 20 at 10:47












i dont get it what is the start
– ghostDs
Nov 20 at 10:51




i dont get it what is the start
– ghostDs
Nov 20 at 10:51












os.system('start "" py Main.py')
– Peter Wood
Nov 20 at 11:12




os.system('start "" py Main.py')
– Peter Wood
Nov 20 at 11:12












@PeterWood thanks alot it worked ,but i have a little bug that is when the os.system('start "" py Main.py') runs the console start but not comes popop. i should press it on taskbar to show
– ghostDs
Nov 20 at 11:28






@PeterWood thanks alot it worked ,but i have a little bug that is when the os.system('start "" py Main.py') runs the console start but not comes popop. i should press it on taskbar to show
– ghostDs
Nov 20 at 11:28














1 Answer
1






active

oldest

votes

















up vote
1
down vote













Not sure if your approach is the best here, but just to answer your specific question: os.system is not the right function here since it waits for the output of the call before continuing (as you might have noticed...). Try to "spawn" a process and tell Python not to wait for any result with something like this:



os.spawnl(os.P_DETACH, 'py Main.py')




EDIT



Given the comments I'll change the answer a bit. To use spawnl in a "with path" mode you have to add a p at the end (spawnlp()). Although the os.system and os.spawn** provide basic functionality, the docs refer to the subprocess library for better control. It makes stuff a little more complicated but I think this example does what you ask for:



import sys
import subprocess

# Constant for detaching a process
DETACHED_PROCESS = 0x00000008

# Start the process and get its PID
pid = subprocess.Popen(["python", "you_second_script.py"], close_fds=True, creationflags=DETACHED_PROCESS).pid
print(pid)

# The end of this script, the started process will continue
sys.exit()





share|improve this answer























  • os.spawnl doesn't use PATH to locate py
    – Peter Wood
    Nov 20 at 19:50












  • thanks for the answer , but @PeterWood answer helped me through this
    – ghostDs
    Nov 22 at 8:24











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53391221%2fhow-to-run-a-python-script-inside-another-script-and-close-itself-immediately%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes








up vote
1
down vote













Not sure if your approach is the best here, but just to answer your specific question: os.system is not the right function here since it waits for the output of the call before continuing (as you might have noticed...). Try to "spawn" a process and tell Python not to wait for any result with something like this:



os.spawnl(os.P_DETACH, 'py Main.py')




EDIT



Given the comments I'll change the answer a bit. To use spawnl in a "with path" mode you have to add a p at the end (spawnlp()). Although the os.system and os.spawn** provide basic functionality, the docs refer to the subprocess library for better control. It makes stuff a little more complicated but I think this example does what you ask for:



import sys
import subprocess

# Constant for detaching a process
DETACHED_PROCESS = 0x00000008

# Start the process and get its PID
pid = subprocess.Popen(["python", "you_second_script.py"], close_fds=True, creationflags=DETACHED_PROCESS).pid
print(pid)

# The end of this script, the started process will continue
sys.exit()





share|improve this answer























  • os.spawnl doesn't use PATH to locate py
    – Peter Wood
    Nov 20 at 19:50












  • thanks for the answer , but @PeterWood answer helped me through this
    – ghostDs
    Nov 22 at 8:24















up vote
1
down vote













Not sure if your approach is the best here, but just to answer your specific question: os.system is not the right function here since it waits for the output of the call before continuing (as you might have noticed...). Try to "spawn" a process and tell Python not to wait for any result with something like this:



os.spawnl(os.P_DETACH, 'py Main.py')




EDIT



Given the comments I'll change the answer a bit. To use spawnl in a "with path" mode you have to add a p at the end (spawnlp()). Although the os.system and os.spawn** provide basic functionality, the docs refer to the subprocess library for better control. It makes stuff a little more complicated but I think this example does what you ask for:



import sys
import subprocess

# Constant for detaching a process
DETACHED_PROCESS = 0x00000008

# Start the process and get its PID
pid = subprocess.Popen(["python", "you_second_script.py"], close_fds=True, creationflags=DETACHED_PROCESS).pid
print(pid)

# The end of this script, the started process will continue
sys.exit()





share|improve this answer























  • os.spawnl doesn't use PATH to locate py
    – Peter Wood
    Nov 20 at 19:50












  • thanks for the answer , but @PeterWood answer helped me through this
    – ghostDs
    Nov 22 at 8:24













up vote
1
down vote










up vote
1
down vote









Not sure if your approach is the best here, but just to answer your specific question: os.system is not the right function here since it waits for the output of the call before continuing (as you might have noticed...). Try to "spawn" a process and tell Python not to wait for any result with something like this:



os.spawnl(os.P_DETACH, 'py Main.py')




EDIT



Given the comments I'll change the answer a bit. To use spawnl in a "with path" mode you have to add a p at the end (spawnlp()). Although the os.system and os.spawn** provide basic functionality, the docs refer to the subprocess library for better control. It makes stuff a little more complicated but I think this example does what you ask for:



import sys
import subprocess

# Constant for detaching a process
DETACHED_PROCESS = 0x00000008

# Start the process and get its PID
pid = subprocess.Popen(["python", "you_second_script.py"], close_fds=True, creationflags=DETACHED_PROCESS).pid
print(pid)

# The end of this script, the started process will continue
sys.exit()





share|improve this answer














Not sure if your approach is the best here, but just to answer your specific question: os.system is not the right function here since it waits for the output of the call before continuing (as you might have noticed...). Try to "spawn" a process and tell Python not to wait for any result with something like this:



os.spawnl(os.P_DETACH, 'py Main.py')




EDIT



Given the comments I'll change the answer a bit. To use spawnl in a "with path" mode you have to add a p at the end (spawnlp()). Although the os.system and os.spawn** provide basic functionality, the docs refer to the subprocess library for better control. It makes stuff a little more complicated but I think this example does what you ask for:



import sys
import subprocess

# Constant for detaching a process
DETACHED_PROCESS = 0x00000008

# Start the process and get its PID
pid = subprocess.Popen(["python", "you_second_script.py"], close_fds=True, creationflags=DETACHED_PROCESS).pid
print(pid)

# The end of this script, the started process will continue
sys.exit()






share|improve this answer














share|improve this answer



share|improve this answer








edited Nov 22 at 7:20

























answered Nov 20 at 12:25









Gijs Wobben

365




365












  • os.spawnl doesn't use PATH to locate py
    – Peter Wood
    Nov 20 at 19:50












  • thanks for the answer , but @PeterWood answer helped me through this
    – ghostDs
    Nov 22 at 8:24


















  • os.spawnl doesn't use PATH to locate py
    – Peter Wood
    Nov 20 at 19:50












  • thanks for the answer , but @PeterWood answer helped me through this
    – ghostDs
    Nov 22 at 8:24
















os.spawnl doesn't use PATH to locate py
– Peter Wood
Nov 20 at 19:50






os.spawnl doesn't use PATH to locate py
– Peter Wood
Nov 20 at 19:50














thanks for the answer , but @PeterWood answer helped me through this
– ghostDs
Nov 22 at 8:24




thanks for the answer , but @PeterWood answer helped me through this
– ghostDs
Nov 22 at 8:24


















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53391221%2fhow-to-run-a-python-script-inside-another-script-and-close-itself-immediately%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Wiesbaden

Marschland

Dieringhausen