use Popen for feature detection to be able to take control of the

working directory
This commit is contained in:
Jakob Ketterl 2019-11-14 22:13:02 +01:00
parent 497d98363f
commit f18efb2344

View File

@ -1,10 +1,11 @@
import os
import subprocess import subprocess
from functools import reduce from functools import reduce
from operator import and_ from operator import and_
import re import re
from distutils.version import LooseVersion from distutils.version import LooseVersion
import inspect import inspect
from owrx.config import PropertyManager
import shlex
import logging import logging
@ -84,7 +85,13 @@ class FeatureDetector(object):
return inspect.getdoc(self._get_requirement_method(requirement)) return inspect.getdoc(self._get_requirement_method(requirement))
def command_is_runnable(self, command): def command_is_runnable(self, command):
return os.system("{0} 2>/dev/null >/dev/null".format(command)) != 32512 tmp_dir = PropertyManager.getSharedInstance()['temporary_directory']
cmd = shlex.split(command)
try:
process = subprocess.Popen(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, cwd=tmp_dir)
return process.wait() != 32512
except FileNotFoundError:
return False
def has_csdr(self): def has_csdr(self):
""" """
@ -145,9 +152,6 @@ class FeatureDetector(object):
# TODO also check if it has the stdout feature # TODO also check if it has the stdout feature
return self.command_is_runnable("hackrf_transfer --help") return self.command_is_runnable("hackrf_transfer --help")
def command_exists(self, command):
return os.system("which {0}".format(command)) == 0
def has_digiham(self): def has_digiham(self):
""" """
To use digital voice modes, the digiham package is required. You can find the package and installation To use digital voice modes, the digiham package is required. You can find the package and installation
@ -246,7 +250,7 @@ class FeatureDetector(object):
""" """
In order to use an Airspy Receiver, you need to install the airspy_rx receiver software. In order to use an Airspy Receiver, you need to install the airspy_rx receiver software.
""" """
return self.command_is_runnable("airspy_rx --help 2> /dev/null") return self.command_is_runnable("airspy_rxxx --help")
def has_wsjtx(self): def has_wsjtx(self):
""" """