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?
python pyqt5
add a comment |
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?
python pyqt5
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
add a comment |
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?
python pyqt5
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
python pyqt5
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
add a comment |
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
add a comment |
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()
os.spawnl
doesn't usePATH
to locatepy
– Peter Wood
Nov 20 at 19:50
thanks for the answer , but @PeterWood answer helped me through this
– ghostDs
Nov 22 at 8:24
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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()
os.spawnl
doesn't usePATH
to locatepy
– Peter Wood
Nov 20 at 19:50
thanks for the answer , but @PeterWood answer helped me through this
– ghostDs
Nov 22 at 8:24
add a comment |
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()
os.spawnl
doesn't usePATH
to locatepy
– Peter Wood
Nov 20 at 19:50
thanks for the answer , but @PeterWood answer helped me through this
– ghostDs
Nov 22 at 8:24
add a comment |
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()
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()
edited Nov 22 at 7:20
answered Nov 20 at 12:25
Gijs Wobben
365
365
os.spawnl
doesn't usePATH
to locatepy
– Peter Wood
Nov 20 at 19:50
thanks for the answer , but @PeterWood answer helped me through this
– ghostDs
Nov 22 at 8:24
add a comment |
os.spawnl
doesn't usePATH
to locatepy
– 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
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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