我尝试从脚本或cronjob启动一个名为ocrmypdf的python程序。
它从终点站运行得很好,
pi@piscan:~ $ ocrmypdf
usage: ocrmypdf [-h] [--verbose [VERBOSE]] [--version] [-L FILE] [-j N] [-n]
[--flowchart FILE] [-l LANGUAGE] [--title TITLE]
[--author AUTHOR] [--subject SUBJECT] [--keywords KEYWORDS]
[-d] [-c] [-i] [--oversample DPI] [-f] [-s]
[--skip-big MPixels] [--tesseract-config TESSERACT_CONFIG]
[--pdf-renderer {auto,tesseract,hocr}]
[--tesseract-timeout TESSERACT_TIMEOUT] [-k] [-g]
input_file output_file
ocrmypdf: error: the following arguments are required: input_file, output_file
但从另一个壳,它打破了我不明白的原因。
pi@piscan:~ $ sh ocrmypdf
sh: 0: Can't open ocrmypdf
pi@piscan:~ $ which ocrmypdf
/usr/local/bin/ocrmypdf
pi@piscan:~ $ sh $(which ocrmypdf)
import: unable to open X server `' @ error/import.c/ImportImageCommand/364.
import: unable to open X server `' @ error/import.c/ImportImageCommand/364.
from: can't read /var/mail/ocrmypdf.main
/usr/local/bin/ocrmypdf: 10: /usr/local/bin/ocrmypdf: Syntax error: "(" unexpected (expecting "then")
这是执行的代码:
pi@piscan:~ $ cat $(which ocrmypdf)
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from ocrmypdf.main import run_pipeline
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(run_pipeline())
发布于 2016-01-02 02:58:17
当键入sh ocrmypdf
时,请sh
shell (可能是/bin/sh
,通常是指向/bin/bash
或/bin/dash
的符号链接)来解释ocrmypdf
文件,这是一个/bin/dash
脚本,而不是一个shell脚本。
因此,要么运行python ocrmypdf
或python $(which ocrmypdf)
,要么使ocrmypdf
脚本可执行。然后(至少在Linux上) execve(2)将启动python解释器,因为谢邦。
当然,ocrmypdf
脚本应该在PATH
中
crontab
作业不在桌面环境中运行。因此,他们无法访问您的X11服务器Xorg (或者如果您正在使用韦兰 )。您可以显式地设置DISPLAY
变量,但我不建议这样做。
https://stackoverflow.com/questions/34565080
复制相似问题