Windows上带有shell = True的Python子进程怪异行为

时间:2019-01-24 23:24:02

标签: python windows shell subprocess

我为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)永远不会写入磁盘。我想找出原因。

0 个答案:

没有答案