qspectrumanalyzer/src/subproc.py
konung-yaropolk be78d7c2a4 modified: dev/ui2py.sh
renamed:    qspectrumanalyzer/__init__.py -> src/__init__.py
	renamed:    qspectrumanalyzer/__main__.py -> src/__main__.py
	renamed:    qspectrumanalyzer/backends/__init__.py -> src/backends/__init__.py
	renamed:    qspectrumanalyzer/backends/hackrf_sweep.py -> src/backends/hackrf_sweep.py
	renamed:    qspectrumanalyzer/backends/rtl_power.py -> src/backends/rtl_power.py
	renamed:    qspectrumanalyzer/backends/rtl_power_fftw.py -> src/backends/rtl_power_fftw.py
	renamed:    qspectrumanalyzer/backends/rx_power.py -> src/backends/rx_power.py
	renamed:    qspectrumanalyzer/backends/soapy_power.py -> src/backends/soapy_power.py
	renamed:    qspectrumanalyzer/baseline.py -> src/baseline.py
	renamed:    qspectrumanalyzer/colors.py -> src/colors.py
	renamed:    qspectrumanalyzer/data.py -> src/data.py
	renamed:    qspectrumanalyzer/languages/qspectrumanalyzer_cs.qm -> src/languages/qspectrumanalyzer_cs.qm
	renamed:    qspectrumanalyzer/languages/qspectrumanalyzer_cs.ts -> src/languages/qspectrumanalyzer_cs.ts
	renamed:    qspectrumanalyzer/persistence.py -> src/persistence.py
	renamed:    qspectrumanalyzer/plot.py -> src/plot.py
	renamed:    qspectrumanalyzer/qspectrumanalyzer.svg -> src/qspectrumanalyzer.svg
	renamed:    qspectrumanalyzer/qspectrumanalyzer.ui -> src/qspectrumanalyzer.ui
	renamed:    qspectrumanalyzer/qspectrumanalyzer_baseline.ui -> src/qspectrumanalyzer_baseline.ui
	renamed:    qspectrumanalyzer/qspectrumanalyzer_colors.ui -> src/qspectrumanalyzer_colors.ui
	renamed:    qspectrumanalyzer/qspectrumanalyzer_persistence.ui -> src/qspectrumanalyzer_persistence.ui
	renamed:    qspectrumanalyzer/qspectrumanalyzer_settings.ui -> src/qspectrumanalyzer_settings.ui
	renamed:    qspectrumanalyzer/qspectrumanalyzer_settings_help.ui -> src/qspectrumanalyzer_settings_help.ui
	renamed:    qspectrumanalyzer/qspectrumanalyzer_smoothing.ui -> src/qspectrumanalyzer_smoothing.ui
	renamed:    qspectrumanalyzer/settings.py -> src/settings.py
	renamed:    qspectrumanalyzer/smoothing.py -> src/smoothing.py
	renamed:    qspectrumanalyzer/subproc.py -> src/subproc.py
	renamed:    qspectrumanalyzer/ui_qspectrumanalyzer.py -> src/ui_qspectrumanalyzer.py
	renamed:    qspectrumanalyzer/ui_qspectrumanalyzer_baseline.py -> src/ui_qspectrumanalyzer_baseline.py
	renamed:    qspectrumanalyzer/ui_qspectrumanalyzer_colors.py -> src/ui_qspectrumanalyzer_colors.py
	renamed:    qspectrumanalyzer/ui_qspectrumanalyzer_persistence.py -> src/ui_qspectrumanalyzer_persistence.py
	renamed:    qspectrumanalyzer/ui_qspectrumanalyzer_settings.py -> src/ui_qspectrumanalyzer_settings.py
	renamed:    qspectrumanalyzer/ui_qspectrumanalyzer_settings_help.py -> src/ui_qspectrumanalyzer_settings_help.py
	renamed:    qspectrumanalyzer/ui_qspectrumanalyzer_smoothing.py -> src/ui_qspectrumanalyzer_smoothing.py
	renamed:    qspectrumanalyzer/utils.py -> src/utils.py
	renamed:    qspectrumanalyzer/version.py -> src/version.py
	renamed:    qspectrumanalyzer/windows.py -> src/windows.py
2022-11-08 23:24:23 -06:00

82 lines
2.7 KiB
Python

import sys, subprocess
# Basic attributes and exceptions
PIPE = subprocess.PIPE
STDOUT = subprocess.STDOUT
DEVNULL = subprocess.DEVNULL
SubprocessError = subprocess.SubprocessError
TimeoutExpired = subprocess.TimeoutExpired
CalledProcessError = subprocess.CalledProcessError
# Windows-only attributes and functions
if sys.platform == 'win32':
import msvcrt
import _winapi
# creationflags
CREATE_NEW_CONSOLE = subprocess.CREATE_NEW_CONSOLE
CREATE_NEW_PROCESS_GROUP = subprocess.CREATE_NEW_PROCESS_GROUP
# startupinfo
STARTUPINFO = subprocess.STARTUPINFO
STARTF_USESTDHANDLES = subprocess.STARTF_USESTDHANDLES
STARTF_USESHOWWINDOW = subprocess.STARTF_USESHOWWINDOW
SW_HIDE = subprocess.SW_HIDE
# file handles
Handle = subprocess.Handle
STD_INPUT_HANDLE = subprocess.STD_INPUT_HANDLE
STD_OUTPUT_HANDLE = subprocess.STD_OUTPUT_HANDLE
STD_ERROR_HANDLE = subprocess.STD_ERROR_HANDLE
def make_inheritable_handle(fd):
"""Create inheritable duplicate of handle from file descriptor"""
h = _winapi.DuplicateHandle(
_winapi.GetCurrentProcess(),
msvcrt.get_osfhandle(fd),
_winapi.GetCurrentProcess(), 0, 1,
_winapi.DUPLICATE_SAME_ACCESS
)
return subprocess.Handle(h)
def hide_console_window(startupinfo=None):
"""Returns altered startupinfo to hide console window on Windows"""
if sys.platform != 'win32':
return None
if not startupinfo:
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
return startupinfo
class Popen(subprocess.Popen):
"""subprocess.Popen with ability to hide console window on Windows"""
def __init__(self, *pargs, console=True, **kwargs):
if not console:
kwargs['startupinfo'] = hide_console_window(kwargs.get('startupinfo'))
super().__init__(*pargs, **kwargs)
def call(*pargs, console=True, **kwargs):
"""subprocess.call with ability to hide console window on Windows"""
if not console:
kwargs['startupinfo'] = hide_console_window(kwargs.get('startupinfo'))
return subprocess.call(*pargs, **kwargs)
def check_call(*pargs, console=True, **kwargs):
"""subprocess.check_call with ability to hide console window on Windows"""
if not console:
kwargs['startupinfo'] = hide_console_window(kwargs.get('startupinfo'))
return subprocess.check_call(*pargs, **kwargs)
def check_output(*pargs, console=True, **kwargs):
"""subprocess.check_output with ability to hide console window on Windows"""
if not console:
kwargs['startupinfo'] = hide_console_window(kwargs.get('startupinfo'))
return subprocess.check_output(*pargs, **kwargs)