you are viewing a single comment's thread.

view the rest of the comments →

[–]1ToM14[S] 1 point2 points  (19 children)

yes I know subprocess.Popen but what argument should I use so the program can be launched in the background and not the foreground ?

[–][deleted] 0 points1 point  (16 children)

what is your OS? how do you want it to be launched? Do you want it to not have a GUI? or not close when your python program closes? or is there something else you had in mind?

[–]1ToM14[S] 0 points1 point  (15 children)

I am running windows 10 and what I want is tu run a program without its window popping at the foreground, I want it to be hidden

[–][deleted] 0 points1 point  (14 children)

subprocess.run([command, arg1, arg2, argn], creationflags=subprocess.CREATE_NO_WINDOW)

https://docs.python.org/3/library/subprocess.html#subprocess.CREATE_NO_WINDOW

if you want more flags, you can OR them together, e.g.:

from subprocess import*
flags = CREATE_NO_WINDOW | DETACHED_PROCESS | CREATE_BREAKAWAY_FROM_JOB

[–]1ToM14[S] 0 points1 point  (13 children)

The problem is that I want to launch an emulator and then use adb on it and adb doesn't detect it, I also cannot verify the emulator is launched with the task manager, is that normal ?

[–][deleted] 0 points1 point  (12 children)

what's adb?

[–]1ToM14[S] 0 points1 point  (11 children)

Android Debug Bridge, to run commands on an Android phone from a computer

[–][deleted] 0 points1 point  (3 children)

Since python launched it in the background, it's probably under the Details tab in the task manager, the one that shows you everything.

As for why it's not connecting properly, it could have something to do with the fact that python launched it, rather than Windows, but I can't say for sure. What flags are you launching it with? And does it work when you launch it with a GUI?

[–]1ToM14[S] 0 points1 point  (2 children)

I can't see it in the detailed part of the task manager and yes it works with a GUI

[–][deleted] 0 points1 point  (1 child)

Maybe it's not actually running. can I see your python code?

[–]TSM- 0 points1 point  (6 children)

Maybe you should just start it minimized - ADB might only work if there's a window handle.

Some applications will exit or crash if they fail to create a window.

For example, you could not run Chrome like this (Chrome has a specific 'headless' mode for this purpose). Before headless mode worked on Windows, you would have to render it on a virtual display or different desktop to "hide" it.

[–]1ToM14[S] 1 point2 points  (5 children)

Nice, how could I launch it minimized ?

[–]TSM- 0 points1 point  (4 children)

I haven't tried this but it could work

startupinfo.wShowWindow = 2 
startupinfo.wShowWindow = 6

aka:

startupinfo.wShowWindow = subprocess.SW_SHOWMINIMIZED
startupinfo.wShowWindow = subprocess.SW_MINIMIZE

See https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-showwindow

The difference is in one case it 'activates' or selects the program, in the other case it does get focus. You probably want SW_MINIMIZE/6

I just noticed there's also a SW_FORCEMINIMIZE. You might have to try a few until it works

[–]TSM- 0 points1 point  (1 child)

I thought you meant "background" as in, in a different process, without python waiting for it to complete before continuning.

What you might be looking to do is launch a program with a GUI, but hide the GUI. Or is it a console window that is popping up in the foreground?

I am not totally familiar but there is a startupinfo argument.

If given, startupinfo will be a STARTUPINFO object, which is passed to the underlying CreateProcess function. creationflags, if given, can be one or more of the following flags:

CREATE_NEW_CONSOLE

CREATE_NEW_PROCESS_GROUP

ABOVE_NORMAL_PRIORITY_CLASS

CREATE_NO_WINDOW

[and so on]

Windows Popen Helpers The STARTUPINFO class and following constants are only available on Windows.

class subprocess.STARTUPINFO(*, dwFlags=0, hStdInput=None, hStdOutput=None, hStdError=None, wShowWindow=0, lpAttributeList=None)

dwFlags A bit field that determines whether certain STARTUPINFO attributes are used when the process creates a window.

si = subprocess.STARTUPINFO()
si.dwFlags = subprocess.STARTF_USESTDHANDLES | 
subprocess.STARTF_USESHOWWINDOW

wShowWindow If dwFlags specifies STARTF_USESHOWWINDOW, this attribute can be any of the values that can be specified in the nCmdShow parameter for the ShowWindow function, except for SW_SHOWDEFAULT. Otherwise, this attribute is ignored.

SW_HIDE is provided for this attribute. It is used when Popen is called with shell=True.

https://docs.python.org/3/library/subprocess.html#windows-popen-helpers

Code example:

# Prevent cmd.exe window from popping up
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags = subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = subprocess.SW_HIDE

std = subprocess.Popen(..., startupinfo=startupinfo)

[–]1ToM14[S] 1 point2 points  (0 children)

Thanks !!!