【问题标题】:Getting an output from Python that gets executed by PHP从 Python 获取由 PHP 执行的输出
【发布时间】:2021-01-25 20:19:12
【问题描述】:

所以我的问题是我有一个运行 Ubuntu 服务器 18.04 和 Apache2 的 AWS EC2 实例,当按下一个按钮时,它会发布一些变量,这些变量会传递给一个函数,然后使用 shell_exec() 来执行 Python 脚本。然后,Python 脚本将这些变量(方向和角度)作为命令行参数,然后尝试将其写入名为 cmds.txt 的文件。但是,执行此操作时,我会收到此错误报告:

    Traceback (most recent call last):
  File "/home/server/cmdWriter.py", line 45, in 
    main()
  File "/home/server/cmdWriter.py", line 41, in main
    servoCmds(direction, angle)
  File "/home/server/cmdWriter.py", line 28, in servoCmds
    cmdFile = open("cmds.txt", "a")
PermissionError: [Errno 13] Permission denied: 'cmds.txt'

经过一番查看,我认为这是因为 PHP 以没有写入权限的用户“www-data”执行,所以在查看其他问题后,我尝试设置权限,以便 www-data 具有读取和写入权限文件夹和python文件。无论出于何种原因,这都行不通!我一直在努力解决这个问题,尝试了其他几个问题的建议,有人可以在这里帮助我吗?

【问题讨论】:

    标签: python php linux amazon-web-services apache2


    【解决方案1】:

    您收到有关“打开”文件的错误。您必须确保 .txt 文件的权限为 755 或更高。如果您使用的服务器是 Linux,那么您有两种方法可以修改权限:

    1. 如果您有 cPanel,您可以使用 cPanel 界面,只需转到文件更改权限,点击更改权限,然后将权限设置为 777。

    1. 在 linux 命令行中,使用 chmod 命令 - 像这样:
    chmod 777 cmds.txt 
    

    如果不了解更多信息,我无法谈论与之相关的安全问题。

    另一种可能是您正在使用“a”模式,但该文件尚不存在。如果您在执行命令时不确定该文件是否存在,您可以尝试“a+”,因为如果文件不存在,则会创建该文件。

    这行得通吗?

    【讨论】:

    • 您好,感谢您的回复。只是再次尝试,可悲的是同样的结果。我也尝试过使用 chown 来制作 python 文件和它所在的文件夹,由 www-data 拥有,但结果也相同。
    • 嗯,我在我的服务器上使用了相同的技术,所以不确定问题是什么。你可以尝试一个测试用例,让你的 PhP 执行你的 Python 脚本,而你的 Python 脚本只是将文本写入一个新的文本文件?你可以试试看是否有效?
    • 好的,设置一下:Python 文件位于 /home/server:import sys file = open("test.txt", "a+") file.write("Test") file.close() PHP 文件位于 /var/www/html:<?php $cmd = "python3 /home/server/test.py 2 2>&1"; echo "Cmd: " . $cmd; $out = shell_exec($cmd); echo "<pre>$out</pre>"; ?> 还是同样的问题。
    • 为什么将“python 3”放在文件路径之前?不应该是(忽略$cmd变量的使用)$out = shell_exec("/home/server/test.py")吗?
    • 啊,那是因为我认为你必须告诉它运行 python 脚本,只是在没有它的情况下对其进行了测试,但仍然被拒绝。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多