require 'singleton' require 'open3' require_relative 'openstudio-standards/version' module OpenstudioStandards require 'json' # Used to load standards JSON files # HVAC sizing require_relative 'openstudio-standards/hvac_sizing/Siz.Model' # Weather data require_relative 'openstudio-standards/weather/Weather.Model' # HVAC standards require_relative 'openstudio-standards/standards/Standards.Model' # BTAP (Natural Resources Canada) require_relative 'openstudio-standards/btap/btap' # Utilities require_relative 'openstudio-standards/utilities/logging' require_relative 'openstudio-standards/utilities/simulation' require_relative 'openstudio-standards/utilities/hash' require_relative 'openstudio-standards/utilities/sqlfile' stds = 'openstudio-standards/standards' proto = 'openstudio-standards/prototypes' ### Standards ### # Standards classes require_relative "#{stds}/standard" require_relative "#{stds}/necb/necb_2011/necb_2011" require_relative "#{stds}/necb/necb_2015/necb_2015" require_relative "#{stds}/necb/necb_2011/building_envelope" require_relative "#{stds}/necb/necb_2011/lighting" require_relative "#{stds}/necb/necb_2011/hvac_systems" require_relative "#{stds}/necb/necb_2015/hvac_systems" require_relative "#{stds}/necb/necb_2011/service_water_heating" require_relative "#{stds}/necb/necb_2011/electrical_power_systems_and_motors" require_relative "#{stds}/necb/necb_2011/beps_compliance_path" # NECB QAQC require_relative "#{stds}/necb/necb_2011/qaqc/necb_qaqc.rb" require_relative "#{stds}/necb/necb_2015/qaqc/necb_2015_qaqc.rb" require_relative "#{stds}/ashrae_90_1/ashrae_90_1" require_relative "#{stds}/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980" require_relative "#{stds}/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013" require_relative "#{stds}/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017" require_relative "#{stds}/deer/deer" require_relative "#{stds}/deer/deer_pre_1975/deer_pre_1975" require_relative "#{stds}/deer/deer_1985/deer_1985" require_relative "#{stds}/deer/deer_1996/deer_1996" require_relative "#{stds}/deer/deer_2003/deer_2003" require_relative "#{stds}/deer/deer_2007/deer_2007" require_relative "#{stds}/deer/deer_2011/deer_2011" require_relative "#{stds}/deer/deer_2014/deer_2014" require_relative "#{stds}/deer/deer_2015/deer_2015" require_relative "#{stds}/deer/deer_2017/deer_2017" require_relative "#{stds}/oeesc/oeesc" require_relative "#{stds}/oeesc/oeesc_2014/oeesc_2014" require_relative "#{stds}/icc_iecc/icc_iecc" require_relative "#{stds}/icc_iecc/icc_iecc_2015/icc_iecc_2015" require_relative "#{stds}/cbes/cbes" require_relative "#{stds}/cbes/cbes_pre_1978/cbes_pre_1978" require_relative "#{stds}/cbes/cbes_t24_1978/cbes_t24_1978" require_relative "#{stds}/cbes/cbes_t24_1992/cbes_t24_1992" require_relative "#{stds}/cbes/cbes_t24_2001/cbes_t24_2001" require_relative "#{stds}/cbes/cbes_t24_2005/cbes_t24_2005" require_relative "#{stds}/cbes/cbes_t24_2008/cbes_t24_2008" # Files with modules require_relative "#{stds}/Standards.Fan" require_relative "#{stds}/Standards.CoilDX" require_relative "#{stds}/Standards.Pump" require_relative "#{stds}/Standards.CoolingTower" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.CoolingTower" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.CoolingTower" require_relative "#{stds}/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.CoolingTower" # Model Objects require_relative "#{stds}/Standards.AirLoopHVAC" require_relative "#{stds}/Standards.AirTerminalSingleDuctParallelPIUReheat" require_relative "#{stds}/Standards.AirTerminalSingleDuctVAVReheat" require_relative "#{stds}/Standards.BoilerHotWater" require_relative "#{stds}/Standards.BuildingStory" require_relative "#{stds}/Standards.ChillerElectricEIR" require_relative "#{stds}/Standards.CoilCoolingDXMultiSpeed" require_relative "#{stds}/Standards.CoilCoolingDXSingleSpeed" require_relative "#{stds}/Standards.CoilCoolingDXTwoSpeed" require_relative "#{stds}/Standards.CoilDX" require_relative "#{stds}/Standards.CoilHeatingDXMultiSpeed" require_relative "#{stds}/Standards.CoilHeatingDXSingleSpeed" require_relative "#{stds}/Standards.CoilHeatingGasMultiStage" require_relative "#{stds}/Standards.Construction" require_relative "#{stds}/Standards.CoolingTower" require_relative "#{stds}/Standards.CoolingTowerSingleSpeed" require_relative "#{stds}/Standards.CoolingTowerTwoSpeed" require_relative "#{stds}/Standards.CoolingTowerVariableSpeed" require_relative "#{stds}/Standards.Fan" require_relative "#{stds}/Standards.FanConstantVolume" require_relative "#{stds}/Standards.FanOnOff" require_relative "#{stds}/Standards.FanVariableVolume" require_relative "#{stds}/Standards.FanZoneExhaust" require_relative "#{stds}/Standards.HeaderedPumpsConstantSpeed" require_relative "#{stds}/Standards.HeaderedPumpsVariableSpeed" require_relative "#{stds}/Standards.HeatExchangerSensLat" require_relative "#{stds}/Standards.Model" require_relative "#{stds}/Standards.PlanarSurface" require_relative "#{stds}/Standards.PlantLoop" require_relative "#{stds}/Standards.Pump" require_relative "#{stds}/Standards.PumpConstantSpeed" require_relative "#{stds}/Standards.PumpVariableSpeed" require_relative "#{stds}/Standards.ScheduleCompact" require_relative "#{stds}/Standards.ScheduleConstant" require_relative "#{stds}/Standards.ScheduleRuleset" require_relative "#{stds}/Standards.Space" require_relative "#{stds}/Standards.SpaceType" require_relative "#{stds}/Standards.SubSurface" require_relative "#{stds}/Standards.Surface" require_relative "#{stds}/Standards.ThermalZone" require_relative "#{stds}/Standards.WaterHeaterMixed" require_relative "#{stds}/Standards.ZoneHVACComponent" # 90.1 Common require_relative "#{stds}/ashrae_90_1/ashrae_90_1.Standards.FanVariableVolume" # 90.1-2004 require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirLoopHVAC" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.FanVariableVolume" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Model" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PlantLoop" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Space" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.ThermalZone" # 90.1-2007 require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirLoopHVAC" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanVariableVolume" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.Model" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.Space" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.ThermalZone" # 90.1-2010 require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirLoopHVAC" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.CoolingTowerSingleSpeed" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.CoolingTowerTwoSpeed" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.CoolingTowerVariableSpeed" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanVariableVolume" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Model" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Space" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.ThermalZone" # 90.1-2013 require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.CoolingTower" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.CoolingTowerSingleSpeed" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.CoolingTowerTwoSpeed" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.CoolingTowerVariableSpeed" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanVariableVolume" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.PlantLoop" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Space" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.ThermalZone" require_relative "#{stds}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.WaterHeaterMixed" # DOE 1980-2004 require_relative "#{stds}/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirLoopHVAC" require_relative "#{stds}/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model" require_relative "#{stds}/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.PlantLoop" # DOE Pre-1980 require_relative "#{stds}/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirLoopHVAC" require_relative "#{stds}/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model" require_relative "#{stds}/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.PlantLoop" # NREL ZNE Ready 2017 require_relative "#{stds}/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC" require_relative "#{stds}/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat" require_relative "#{stds}/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.CoolingTower" require_relative "#{stds}/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.CoolingTowerSingleSpeed" require_relative "#{stds}/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.CoolingTowerTwoSpeed" require_relative "#{stds}/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.CoolingTowerVariableSpeed" require_relative "#{stds}/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.FanVariableVolume" require_relative "#{stds}/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.HeatExchangerSensLat" require_relative "#{stds}/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Model" require_relative "#{stds}/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop" require_relative "#{stds}/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Space" require_relative "#{stds}/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.ThermalZone" require_relative "#{stds}/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.ZoneHVACComponent" # DEER Common require_relative "#{stds}/deer/deer.Model" require_relative "#{stds}/deer/deer.AirLoopHVAC" require_relative "#{stds}/deer/deer.Space" # CBES Common require_relative "#{stds}/cbes/cbes.AirLoopHVAC" require_relative "#{stds}/cbes/cbes.Model" require_relative "#{stds}/cbes/cbes.PlantLoop" require_relative "#{stds}/cbes/cbes.Space" # CBES T24 2005 require_relative "#{stds}/cbes/cbes_t24_2005/cbes_t24_2005.Space" # CBES T24 2008 require_relative "#{stds}/cbes/cbes_t24_2008/cbes_t24_2008.Space" ### Prototypes ### # Building Types require_relative "#{proto}/common/buildings/Prototype.FullServiceRestaurant" require_relative "#{proto}/common/buildings/Prototype.HighRiseApartment" require_relative "#{proto}/common/buildings/Prototype.Hospital" require_relative "#{proto}/common/buildings/Prototype.LargeHotel" require_relative "#{proto}/common/buildings/Prototype.LargeOffice" require_relative "#{proto}/common/buildings/Prototype.MediumOffice" require_relative "#{proto}/common/buildings/Prototype.MidriseApartment" require_relative "#{proto}/common/buildings/Prototype.Outpatient" require_relative "#{proto}/common/buildings/Prototype.PrimarySchool" require_relative "#{proto}/common/buildings/Prototype.QuickServiceRestaurant" require_relative "#{proto}/common/buildings/Prototype.RetailStandalone" require_relative "#{proto}/common/buildings/Prototype.RetailStripmall" require_relative "#{proto}/common/buildings/Prototype.SecondarySchool" require_relative "#{proto}/common/buildings/Prototype.SmallHotel" require_relative "#{proto}/common/buildings/Prototype.SmallOffice" require_relative "#{proto}/common/buildings/Prototype.SuperMarket" require_relative "#{proto}/common/buildings/Prototype.Warehouse" # NECB Building Types require_relative "#{proto}/common/prototype_metaprogramming.rb" create_meta_classes # Model Objects require_relative "#{proto}/common/objects/Prototype.AirConditionerVariableRefrigerantFlow" require_relative "#{proto}/common/objects/Prototype.AirTerminalSingleDuctVAVReheat" require_relative "#{proto}/common/objects/Prototype.BoilerHotWater" require_relative "#{proto}/common/objects/Prototype.CoilCoolingDXSingleSpeed" require_relative "#{proto}/common/objects/Prototype.CoilCoolingDXTwoSpeed" require_relative "#{proto}/common/objects/Prototype.CoilCoolingWater" require_relative "#{proto}/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit" require_relative "#{proto}/common/objects/Prototype.CoilHeatingDXSingleSpeed" require_relative "#{proto}/common/objects/Prototype.CoilHeatingElectric" require_relative "#{proto}/common/objects/Prototype.CoilHeatingGas" require_relative "#{proto}/common/objects/Prototype.CoilHeatingWater" require_relative "#{proto}/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit" require_relative "#{proto}/common/objects/Prototype.ControllerWaterCoil" require_relative "#{proto}/common/objects/Prototype.Fan" require_relative "#{proto}/common/objects/Prototype.FanConstantVolume" require_relative "#{proto}/common/objects/Prototype.FanOnOff" require_relative "#{proto}/common/objects/Prototype.FanVariableVolume" require_relative "#{proto}/common/objects/Prototype.FanZoneExhaust" require_relative "#{proto}/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent" require_relative "#{proto}/common/objects/Prototype.hvac_systems" require_relative "#{proto}/common/objects/Prototype.Model.elevators" require_relative "#{proto}/common/objects/Prototype.Model.exterior_lights" require_relative "#{proto}/common/objects/Prototype.Model.hvac" require_relative "#{proto}/common/objects/Prototype.Model" require_relative "#{proto}/common/objects/Prototype.Model.swh" require_relative "#{proto}/common/objects/Prototype.refrigeration" require_relative "#{proto}/common/objects/Prototype.ServiceWaterHeating" require_relative "#{proto}/common/objects/Prototype.SizingSystem" require_relative "#{proto}/common/objects/Prototype.utilities" # 90.1-2004 require_relative "#{proto}/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirTerminalSingleDuctVAVReheat" # 90.1-2007 require_relative "#{proto}/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanConstantVolume" require_relative "#{proto}/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanOnOff" require_relative "#{proto}/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanVariableVolume" require_relative "#{proto}/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirTerminalSingleDuctVAVReheat" # 90.1-2010 require_relative "#{proto}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanConstantVolume" require_relative "#{proto}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanOnOff" require_relative "#{proto}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanVariableVolume" require_relative "#{proto}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Model" require_relative "#{proto}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Model.elevators" require_relative "#{proto}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat" # 90.1-2013 require_relative "#{proto}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanConstantVolume" require_relative "#{proto}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanOnOff" require_relative "#{proto}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanVariableVolume" require_relative "#{proto}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model" require_relative "#{proto}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.elevators" require_relative "#{proto}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.hvac_systems" require_relative "#{proto}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat" # DOE Ref 1980-2004 require_relative "#{proto}/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirTerminalSingleDuctVAVReheat" require_relative "#{proto}/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.elevators" require_relative "#{proto}/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.hvac_systems" require_relative "#{proto}/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.refrigeration" # DOE Ref Pre-1980 require_relative "#{proto}/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirTerminalSingleDuctVAVReheat" require_relative "#{proto}/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.CoilHeatingGas" require_relative "#{proto}/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.elevators" require_relative "#{proto}/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.hvac_systems" require_relative "#{proto}/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.refrigeration" # NREL ZNE Ready 2017 require_relative "#{proto}/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat" require_relative "#{proto}/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.FanConstantVolume" require_relative "#{proto}/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.FanOnOff" require_relative "#{proto}/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.FanVariableVolume" require_relative "#{proto}/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model" require_relative "#{proto}/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.elevators" require_relative "#{proto}/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.hvac_systems" # DEER require_relative "#{proto}/deer/deer.Model" # CBES Common require_relative "#{proto}/cbes/cbes.Model.elevators" require_relative "#{proto}/cbes/cbes.refrigeration" # CBES T24 2008 require_relative "#{proto}/cbes/cbes_t24_2008/cbes_t24_2008.FanConstantVolume" require_relative "#{proto}/cbes/cbes_t24_2008/cbes_t24_2008.FanOnOff" require_relative "#{proto}/cbes/cbes_t24_2008/cbes_t24_2008.FanVariableVolume" # DLM: not sure where this code should go def self.get_run_env() # blank out bundler and gem path modifications, will be re-setup by new call new_env = {} new_env["BUNDLER_ORIG_MANPATH"] = nil new_env["BUNDLER_ORIG_PATH"] = nil new_env["BUNDLER_VERSION"] = nil new_env["BUNDLE_BIN_PATH"] = nil new_env["RUBYLIB"] = nil new_env["RUBYOPT"] = nil # DLM: preserve GEM_HOME and GEM_PATH set by current bundle because we are not supporting bundle # requires to ruby gems will work, will fail if we require a native gem #new_env["GEM_PATH"] = nil #new_env["GEM_HOME"] = nil # DLM: for now, ignore current bundle in case it has binary dependencies in it #bundle_gemfile = ENV['BUNDLE_GEMFILE'] #bundle_path = ENV['BUNDLE_PATH'] #if bundle_gemfile.nil? || bundle_path.nil? new_env['BUNDLE_GEMFILE'] = nil new_env['BUNDLE_PATH'] = nil #else # new_env['BUNDLE_GEMFILE'] = bundle_gemfile # new_env['BUNDLE_PATH'] = bundle_path #end return new_env end def self.run_command(command) stdout_str, stderr_str, status = Open3.capture3(get_run_env(), command) if status.success? puts "Command completed successfully" #puts "stdout: #{stdout_str}" #puts "stderr: #{stderr_str}" return true else puts "Error running command: '#{command}'" puts "stdout: #{stdout_str}" puts "stderr: #{stderr_str}" return false end end end