在 python cgi-bin 中调用外部函数

call external function in python cgi-bin

我正在尝试从 Python cgi-bin 脚本中调用 Torch 7 程序。

如果我从命令行 运行 以下 Python 脚本:

# -*- coding: utf-8 -*-
from subprocess import call
call (['th', 'sample.lua', 'cv/lm_lstm_epoch3.54_0.9324.t7', '-gpuid', '-1', '-primetext', '"אמר הגאון הגרפקא המן איש טוב היה שנאמר"', '-temperature', '1.0', '-length', '1000'])

这工作正常,我得到以下输出

ubuntu@ip-172-31-45-110:/usr/lib/cgi-bin$ python test2.py creating an lstm...

seeding with "אמר הגאון הגרפקא המן איש טוב היה שנאמר"

"אמר הגאון הגרפקא המן איש טוב היה שנאמר"זה יקרק ידו מי שכן בלבד ומחללין עליו אותוממנו וזכה זה לא סולד דינר הקדשו מחופה את אשתו מבית הרן וביניהןאבל יום אחד ולמנין שניה ימיבתן ככלום זכותדכתיב אשר בחרם אם אשר עשו לא כל חטאת קמיהבדין נקרא ולא מהוציאה ולא ניקבה לא אמר ליה אם תימצילומר עד דכם ראשון בגובהו הרי ז] נידוןטומאה מידקיסא אי תלמודה ומי איכא למיפרך מהלשרעתו לאהתנאו לא א"ל הכי קאמר אפילושחי ושוברו של מקום הראשוןכסיפו והרי חילין בבית המקדש והיכיממעיטרים אחרינא ועיבור בישראל מי איכא מידיאישתי מירחו דשקיל אמר להו אי שבעים שנה שעוריםעלין א"כ רבי ינאי בר מישראלאמר לו נפש גזר קונשי ב תרצות

但是,如果我尝试从 cgi-bin 脚本调用 Torch 7

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import subprocess
import os, sys

import cgi, cgitb


print "Content-Type: text/html"
print                
print "<TITLE>CGI script output</TITLE>"

output = ""

output = subprocess.call (['th', 'sample.lua', 'cv/lm_lstm_epoch3.54_0.9324.t7', '-gpuid', '-1', '-primetext', '"אמר הגאון הגרפקא המן איש טוב היה שנאמר"', '-temperature', '1.0', '-length', '1000'])

print output

然后我在网页上完全没有输出,apache 错误日志中也没有错误。

谢谢

你要用check_output to store the output of the command you are executing. call不会这样。 Call 只会给你你正在执行的代码 return 。

subprocess.check_output(['th', 'sample.lua', 'cv/lm_lstm_epoch3.54_0.9324.t7', '-gpuid', '-1', '-primetext', '"אמר הגאון הגרפקא המן איש טוב היה שנאמר"', '-temperature', '1.0', '-length', '1000'])

也许你可以尝试 lutorpy 然后你可以 运行 直接使用 python 火炬代码。您可以使用 require("sample") 导入您的 sample.lua 模块,然后 运行 内部函数就像您 运行 一个 python 函数。