我为Windows上以下python代码的shell = True / False切换行为所困扰:
router.post('/gene_diff', setConnectionTimeout('12h'), function(req, res) {
let datasetArr = JSON.parse(req.body.datasetArr);
let clusterArr = JSON.parse(req.body.clusterArr);
let shCMD = 'Rscript --vanilla R/run_deseq2.R ';
shCMD += datasetArr[0] + ' ' + datasetArr[1] + ' ';
shCMD += clusterArr[0] + ' ' + clusterArr[1];
shell.exec(shCMD, function(code, stdout, stderr) {
if (code === 0) {
console.log('Program output:', stdout);
res.sendStatus(200);
} else {
console.log('Program stderr:', stderr);
res.sendStatus(500);
}
});
});
使用适当的参数,# shell = False
shell = True
cmd = "ogr2ogr ..."
subprocess.check_output(cmd,shell=shell)
的目的是调用GDAL的 ogr2ogr 将postgres表导出到shapefile。给予ogr2ogr的输出路径是绝对路径。在两种情况下,我都发现:
cmd
在语法上有效,并且确实由python生成了ogr2ogr子进程。但是,与cmd
相比,在shell=True
的情况下,输出shapefile(.shp)永远不会写入磁盘。我想找出原因。