【发布时间】:2020-11-09 20:05:36
【问题描述】:
这有点特定于我正在使用的算法。但基本上,我有一个使用以下命令运行的算法:
w2cropconv -i /mnt/data/SHAVE_cubes/20120329/multi0/code_index.xml -I "Heightof0C" -o /mnt/data/SHAVE_cubes/20120329/multi0/.. -t "38.4 -97.85 21" -b "37.8 -97.15 1" -s "0.005 0.005 1" -R
我使用以下命令使用 popen() 运行它:
p = subprocess.Popen(
[
"w2cropconv",
"-i",
path,
"-I",
"HeightofOC",
"-o",
output_directory,
"-t",
NWloc,
"-b",
SEloc,
"-s",
"0.005 0.005 1",
"-R",
]
)
虽然 popen() 命令正确运行,但它实际上并没有输出任何内容。在第一种情况下,算法输出到/multi0/ 目录。 popep() 函数不会写入该目录,即使它确实应该写入。这不是我编码中的错误,我确信这是我不知道的 popep() 特有的东西。
我知道输入和输出目录是相同的,因为当我执行任何一个时,我都会得到以下信息:
key [i], val [/mnt/data/SHAVE_cubes/20120329/multi0/code_index.xml]
key [I], val [HeightofOC]
key [o], val [/mnt/data/SHAVE_cubes/20120329/Heightof0C]
key [t], val [38.4 -97.85 21]
key [b], val [37.8 -97.15 1]
key [s], val [0.01 0.01 1]
key [R], val [true]
当它们分歧时,正确的过程会产生以下输出:
(../util/code_W2Unit.cc:66 getUtUnit) Initializing UDUNITS, Version 2 or greater...
(../util/code_W2Unit.cc:82 getUtUnit) Set UDUNITS2_XML_PATH=/usr/local/WDSS2/WDSS2/w2/w2config/misc/udunits2.xml
(code_LatLonConverter.cc:208 processInputField) Converting LatLonGrid: Heightof0C at 20120329-210000 location (lat=[58.366001 deg],lon=[-139.856 deg],h=[0 km]) and creating 1 output grids
(code_DataRemapper.cc:138 getLookup) DataRemapper: creating lookup for LatLonGrid NWcorner: Loc: 58.4 -139.9 dim: [225 x 301] latres: [0.188] lonres: [0.275] to LatLonGrid NWcorner: Loc: 38.4 -97.8 dim: [120 x 140] latres: [0.005] lonres: [0.005]
(code_DataRemapper.cc:140 getLookup) There are now 1 remapping lookup tables stored.
(code_NetcdfDataEncoder.cc:122 applySettings) Using FINAL SPARSEGRID threshold of {-1} based on settings in w2config/misc/dataformat .
如果我没有马上回答,请见谅,我很头疼。
【问题讨论】:
-
您确定
path和output_directory完全正确吗?也许试试subprocess.check_call();如果命令以非零状态码退出,Popen本身不会引发异常。 -
(另外,
Popen将返回一个表示您必须等待退出的进程的对象;check_call()会为您执行此操作。) -
请看我的帖子,我已经编辑显示两者完全相同。你能解释一下你的第二条评论吗@AKX
标签: python subprocess popen