我的服务器是Python和PHP的混合 - PHP的管理从用户收到的消息,然后用参数的过程把它传送到Python,然后返回相应的计算:Python记录从PHP脚本统制挡住呼叫
#!/usr/bin/env python
import argparse
def addTwoArgs(a, b):
return a + b
if __name__ == "__main__":
# create the top-level parser
parser = argparse.ArgumentParser()
parser.add_argument('integera', type=int, help='first integer')
parser.add_argument('integerb', type=int, help='second integer')
args = parser.parse_args()
if args.integera and args.integerb:
result = addTwoArgs(args.integera, args.integerb)
print(result)
虽然我确信我可以在这里做得更好(并且关于如何更好地设置这个以发送到PHP的建议将不胜感激),但它以当前的形式工作。这只是来自PHP的电话:
exec("python /home/ubuntu/php_test.py 60 7", $output);
这将给出67的答案。一切都好。
但是,我试图在日志中添加以便知道PHP何时进行调用。即使在正式加入了处理程序,该脚本几乎“退出”试图创建一个文件处理程序时 - 或在下面的例子中调用handler = logging.FileHandler("addTwoArgs.log")
时:
#!/usr/bin/env python
import argparse
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
# create a file handler (PHP CALL FAILS HERE)
handler = logging.FileHandler("addTwoArgs.log")
# other logging commands
....
....
logger.addHandler(handler)
def addTwoArgs(a, b):
return a + b
if __name__ == "__main__":
# create the top-level parser
parser = argparse.ArgumentParser()
parser.add_argument('integera', type=int, help='first integer')
parser.add_argument('integerb', type=int, help='second integer')
args = parser.parse_args()
if args.integera and args.integerb:
result = addTwoArgs(args.integera, args.integerb)
print(result)
考虑这个脚本完美的作品时,通过SSH叫,它采取了而拿起记录器可能是一个问题。我认为这是用户权限的问题。我可以通过具有相当全面特权的SSH运行脚本,但我将从Web浏览器(我认为这里使用的是www用户)调用PHP脚本。
我试过将文件权限更改为666,没有任何更改。
我也试着用Python 3调用脚本,没有任何改变。
exec("/usr/bin/python3 /home/ubuntu/php_test.py 60 7", $output);
任何帮助将不胜感激!