我的服務器是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);
任何幫助將不勝感激!