exec() python 命令停止整个执行
exec() python command stops the whole execution
我正在尝试 运行 一个按顺序更改配置文件中某些参数的脚本 (MET_config_EEv40.cfg) 和 运行 一个检索这些参数的脚本 ('IS_MET_EEv40_RAW.py')新配置参数:
config_filename = os.getcwd() + '/MET_config_EEv40.cfg'
import sys
parser = configparser.ConfigParser()
parser.read('MET_config_EEv40.cfg')
parser.set('RAW', 'product', 'ERA')
parser.set('RAW', 'gee_product', 'ECMWF/ERA5_LAND/HOURLY')
parser.set('RAW', 'indicator', 'PRCP')
parser.set('RAW', 'resolution', '11110')
with open('MET_config_EEv40.cfg', 'w') as configfile:
parser.write(configfile)
## execute file
import sys
os.system(exec(open('IS_MET_EEv40_RAW.py').read()))
#exec(open('IS_MET_EEv40_RAW.py').read())
print('I am here')
这次执行后,我得到了预期的脚本输出:
Period of Reference: 2005 - 2019
Area of Interest: /InfoSequia/GIS/ink/shp_basin_wgs84.shp
Raw data is up to date. No new dates available in raw data
Press any key to continue . . .
但它从不打印结束行:I am here,这意味着在脚本执行后,算法终止。那不是我想要它做的,因为我希望能够更改一些其他配置参数并再次 运行 脚本。
显示该输出是因为这行代码:
if (delta.days<=1):
sys.exit('Raw data is up to date. No new dates available in raw data')
那么 sys.exit 可能会结束这两个进程吗?有什么想法可以在代码中替换 sys.exit() 来避免这种情况吗?
Im executing this file from a .bat file that contains the following:
@echo OFF
docker exec container python MET/PRCPmain.py
pause
exec(source, globals=None, locals=None, /)
确实
Execute the given source in the context of globals and locals.
所以
import sys
exec("sys.exit(0)")
print("after")
等同于写
import sys
sys.exit(0)
print("after")
显然终止并且不打印 after
。
exec
具有可选参数 globals
,您可以使用它来提供 sys
的替代方案,例如
class MySys:
def exit(self, *args):
pass
exec("sys.exit(0)",{"sys":MySys()})
print("after")
哪个输出
after
因为它确实使用了 MySys 实例中的 exit
。如果您的代码使用 sys
中的其他东西并希望它正常工作,您需要方法模仿 MySys
class
中的 sys
函数
我正在尝试 运行 一个按顺序更改配置文件中某些参数的脚本 (MET_config_EEv40.cfg) 和 运行 一个检索这些参数的脚本 ('IS_MET_EEv40_RAW.py')新配置参数:
config_filename = os.getcwd() + '/MET_config_EEv40.cfg'
import sys
parser = configparser.ConfigParser()
parser.read('MET_config_EEv40.cfg')
parser.set('RAW', 'product', 'ERA')
parser.set('RAW', 'gee_product', 'ECMWF/ERA5_LAND/HOURLY')
parser.set('RAW', 'indicator', 'PRCP')
parser.set('RAW', 'resolution', '11110')
with open('MET_config_EEv40.cfg', 'w') as configfile:
parser.write(configfile)
## execute file
import sys
os.system(exec(open('IS_MET_EEv40_RAW.py').read()))
#exec(open('IS_MET_EEv40_RAW.py').read())
print('I am here')
这次执行后,我得到了预期的脚本输出:
Period of Reference: 2005 - 2019
Area of Interest: /InfoSequia/GIS/ink/shp_basin_wgs84.shp
Raw data is up to date. No new dates available in raw data
Press any key to continue . . .
但它从不打印结束行:I am here,这意味着在脚本执行后,算法终止。那不是我想要它做的,因为我希望能够更改一些其他配置参数并再次 运行 脚本。
显示该输出是因为这行代码:
if (delta.days<=1):
sys.exit('Raw data is up to date. No new dates available in raw data')
那么 sys.exit 可能会结束这两个进程吗?有什么想法可以在代码中替换 sys.exit() 来避免这种情况吗?
Im executing this file from a .bat file that contains the following:
@echo OFF
docker exec container python MET/PRCPmain.py
pause
exec(source, globals=None, locals=None, /)
确实
Execute the given source in the context of globals and locals.
所以
import sys
exec("sys.exit(0)")
print("after")
等同于写
import sys
sys.exit(0)
print("after")
显然终止并且不打印 after
。
exec
具有可选参数 globals
,您可以使用它来提供 sys
的替代方案,例如
class MySys:
def exit(self, *args):
pass
exec("sys.exit(0)",{"sys":MySys()})
print("after")
哪个输出
after
因为它确实使用了 MySys 实例中的 exit
。如果您的代码使用 sys
中的其他东西并希望它正常工作,您需要方法模仿 MySys
class
sys
函数