django无法使用subprocess.Popen()运行exiftool

时间:2019-08-02 16:25:37

标签: django permissions ubuntu-18.04 exiftool

我在django项目中使用exiftool,但是django似乎无法运行它。

我不知道如何找到原因,因为当我使用exiftool调用流程时没有错误发生。我认为这是权限问题。当我在终端中运行exiftool -j <image>时,一切正常,并且得到正确的结果,但是当我使用下面的代码时,我收到一条错误消息,提示django无法运行exiftool

cmd_get_meta = 'exiftool -j "{filename}"'.format(filename=absolute_file_path)
    process = subprocess.Popen(cmd_get_meta,
                               stdout=subprocess.PIPE,
                               stderr=subprocess.STDOUT,
                               shell=True)
    raw_result = process.communicate()
    meta = json.loads(str(raw_result[0], 'utf-8'))[0]

错误是:

File "/usr/lib/python3.5/json/decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None

因此,显然exiftool -j "{filename}"不是由Django运行的。

其他信息:我更新了exiftool后出现了此问题,并且我确定代码是正确的。 django由uWSGi运行,此命令显示正在运行exiftool和uwsgi的用户:

$ ps aux | grep uwsgi   
backend   1243  0.0  0.0  14224   988 pts/9    S+   14:52   0:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn uwsgi
www-data 20469  0.0  0.7 222664 63984 ?        S     2018  32:55 /usr/bin/uwsgi --ini /usr/share/uwsgi/conf/default.ini --ini /etc/uwsgi/apps-enabled/hamclassy.ini --daemonize /var/log/uwsgi/app/hamclassy.log
www-data 32357  0.0  0.8 473188 67804 ?        Sl   14:18   0:00 /usr/bin/uwsgi --ini /usr/share/uwsgi/conf/default.ini --ini /etc/uwsgi/apps-enabled/hamclassy.ini --daemonize /var/log/uwsgi/app/hamclassy.log
www-data 32358  0.0  0.8 473188 67436 ?        Sl   14:18   0:00 /usr/bin/uwsgi --ini /usr/share/uwsgi/conf/default.ini --ini /etc/uwsgi/apps-enabled/hamclassy.ini --daemonize /var/log/uwsgi/app/hamclassy.log
www-data 32362  0.0  0.8 476604 67700 ?        Sl   14:18   0:00 /usr/bin/uwsgi --ini /usr/share/uwsgi/conf/default.ini --ini /etc/uwsgi/apps-enabled/hamclassy.ini --daemonize /var/log/uwsgi/app/hamclassy.log
www-data 32363  0.0  0.8 472792 67296 ?        Sl   14:18   0:00 /usr/bin/uwsgi --ini /usr/share/uwsgi/conf/default.ini --ini /etc/uwsgi/apps-enabled/hamclassy.ini --daemonize /var/log/uwsgi/app/hamclassy.log
www-data 32368  0.0  0.9 482496 74316 ?        Sl   14:18   0:01 /usr/bin/uwsgi --ini /usr/share/uwsgi/conf/default.ini --ini /etc/uwsgi/apps-enabled/hamclassy.ini --daemonize /var/log/uwsgi/app/hamclassy.log
www-data 32372  0.0  0.8 476348 67296 ?        Sl   14:18   0:00 /usr/bin/uwsgi --ini /usr/share/uwsgi/conf/default.ini --ini /etc/uwsgi/apps-enabled/hamclassy.ini --daemonize /var/log/uwsgi/app/hamclassy.log
www-data 32376  0.0  0.8 477884 69996 ?        Sl   14:18   0:01 /usr/bin/uwsgi --ini /usr/share/uwsgi/conf/default.ini --ini /etc/uwsgi/apps-enabled/hamclassy.ini --daemonize /var/log/uwsgi/app/hamclassy.log
www-data 32377  0.0  0.8 477116 68968 ?        Sl   14:18   0:00 /usr/bin/uwsgi --ini /usr/share/uwsgi/conf/default.ini --ini /etc/uwsgi/apps-enabled/hamclassy.ini --daemonize /var/log/uwsgi/app/hamclassy.log
$ ps aux | grep exiftool
backend   1233  0.0  0.0  14224  1016 pts/9    S+   14:52   0:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn exiftool

为什么从代码中调用exiftool时不运行?

0 个答案:

没有答案