【问题标题】:Running python script through PHP script not working通过PHP脚本运行python脚本不起作用
【发布时间】:2021-03-07 06:10:50
【问题描述】:

所以基本上,我正在尝试对我将要构建的网站进行一些初步测试。 将通过该站点进行下载,可能由不同用户下载相同的资源,可能几乎或同时进行。我想实现一种锁管理器,以防止在资源已经在进行中时重复下载资源。

我正在运行的测试只是为了看看这是否可能。我现在特别测试的是,如果我开始运行一个程序,如果我再次尝试打开该程序,它会打开一个全新的实例还是转到已经打开的实例。我这样做是为了尝试查看用户 1 是否在他们的程序中进行了更改,如果第二个用户打开他们的程序,他们会看到这些更改;否则,如果他们打开一个全新的程序实例,他们可能看不到更改。

PHP

exec(escapeshellcmd("C:\Program Files\Python 3.7\python.exe Test2Php.py 0 Testing"), $o1, $r);
echo $r;
var_dump($o1);

Python

#!/usr/bin/env python

import sys

arr = []

t = sys.argv[1]
if (t == '0'):
arr = [sys.argv[k] for k in range(2, len(sys.argv))]
print("if")
else:

print(str(len(arr)))

问题是脚本根本不返回任何输出!它也不运行。我通过让 python 程序在成功执行结束时写入一个文件来测试这一点。我尝试过 shell_exec、passthru 等。程序本身在通过命令行运行时可以工作,但在我制作的任何脚本中都没有。

我在 Windows 上使用 WAMP 服务器。

编辑:

对于其他处理此问题的人。确保您的系统路径变量中有默认的 Python 包。您可以通过安装最新版本的 python 并选择添加到系统路径来轻松完成此操作。卸载 anaconda 或其他任何可能妨碍系统路径并享受的东西。 还要确保找到 python exe 所在的位置并使用它的完整路径。

【问题讨论】:

  • 您的编辑是否意味着您解决了问题?您是否在日志文件中查找错误?
  • 是的,鲁弗斯。我认识到这是某种权限/特权问题,因为脚本在我手动执行时有效,但在我的 php 脚本执行时无效。然后我注意到我有 anaconda 作为我的默认 python,所以我用 python 解释器本身替换了它。我确保将其添加到系统路径中。然后我在我的 php 脚本中使用了 python exe 的完整路径,并且它起作用了!
  • 我还想补充一下我最初测试的内容。每个不同的 php 脚本都会打开您使用 exec/system/etc 的任何程序的新实例。为。

标签: python php wamp


【解决方案1】:

您的列表理解将超出范围,因为您永远无法在没有得到IndexError 的情况下执行lst[len(lst)]str() 包装器不是打印len(arr) 所必需的。

改为使用[:2] 的切片来删除前两个元素:

#!/usr/bin/env python

import sys

arr = []

t = sys.argv[1]

if t == '0':
    arr = sys.argv[2:]
    print("if")
else:
    print(len(arr))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 2020-09-02
    • 2018-01-31
    • 1970-01-01
    • 2019-05-11
    • 2018-08-15
    相关资源
    最近更新 更多