
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
82 lines
2.7 KiB
Python
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)
|