调用脚本可以在终端上运行,但不能在python subprocess.call上运行

时间:2019-10-31 17:56:27

标签: python python-2.7 apache subprocess cgi

下面是我的代码。在终端中调用时可以使用,但不能在python 2.7脚本中使用。

/usr/bin/python3.5 /var/www/html/web_map/simplemap/resources/py/align_raster.py
/mnt/13aa104a-192c-43e5-95af-68aba6ac57a9/temp/85a0b2f9-c3fb-4913-9d70-a0c49f3649ba/chlor_a-modis-aqua-01_2013.tif,
/mnt/13aa104a-192c-43e5-95af-68aba6ac57a9/temp/85a0b2f9-c3fb-4913-9d70-a0c49f3649ba/chlor_a-modis-aqua-02_2013.tif,
/mnt/13aa104a-192c-43e5-95af-68aba6ac57a9/temp/85a0b2f9-c3fb-4913-9d70-a0c49f3649ba/chlor_a-modis-aqua-03_2013.tif,
/mnt/13aa104a-192c-43e5-95af-68aba6ac57a9/temp/85a0b2f9-c3fb-4913-9d70-a0c49f3649ba/chlor_a-modis-aqua-04_2013.tif,
/mnt/13aa104a-192c-43e5-95af-68aba6ac57a9/temp/85a0b2f9-c3fb-4913-9d70-a0c49f3649ba/chlor_a-modis-aqua-05_2013.tif,
/mnt/13aa104a-192c-43e5-95af-68aba6ac57a9/temp/85a0b2f9-c3fb-4913-9d70-a0c49f3649ba/chlor_a-modis-aqua-06_2013.tif,
/mnt/13aa104a-192c-43e5-95af-68aba6ac57a9/temp/85a0b2f9-c3fb-4913-9d70-a0c49f3649ba/chlor_a-modis-aqua-07_2013.tif,
/mnt/13aa104a-192c-43e5-95af-68aba6ac57a9/temp/85a0b2f9-c3fb-4913-9d70-a0c49f3649ba/chlor_a-modis-aqua-08_2013.tif,
/mnt/13aa104a-192c-43e5-95af-68aba6ac57a9/temp/85a0b2f9-c3fb-4913-9d70-a0c49f3649ba/chlor_a-modis-aqua-09_2013.tif,
/mnt/13aa104a-192c-43e5-95af-68aba6ac57a9/temp/85a0b2f9-c3fb-4913-9d70-a0c49f3649ba/chlor_a-modis-aqua-10_2013.tif,
/mnt/13aa104a-192c-43e5-95af-68aba6ac57a9/temp/85a0b2f9-c3fb-4913-9d70-a0c49f3649ba/chlor_a-modis-aqua-11_2013.tif
_aligned.tif

这是终端中的输出。

Segmentation fault (core dumped)

那是QGIS python独立脚本。它总是显示该错误,但是文件会处理所需的任何内容。

这不起作用。

cmd = '/usr/bin/python3.5 /var/www/html/web_map/simplemap/resources/py/align_raster.py {} {}'.format(
    output_files_string, output_suffix
)
print(cmd)

result = call(cmd.split(), shell=False)

我也尝试过shell=True

它可能是由代码转储引起的,但是有没有办法欺骗python文件是否正常?

编辑:使用this解决方案修复了代码转储。

Edit2 :我认为此问题与Apache CGI Python有关。由于仅从浏览器运行时失败。

1 个答案:

答案 0 :(得分:0)

使用subprocess

import subprocess

subprocess.Popen(cmd, shell=True)

您甚至可以通过设置

来阻止输出到python控制台
import subprocess

subprocess.Popen(cmd,
                 shell=True,
                 stdout=subprocess.DEVNULL,
                 stderr=subprocess.STDOUT)