1

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

我正在运行的测试只是为了看看这是否可能。我现在特别测试的是,如果我开始运行一个程序,如果我再次尝试打开该程序,它会打开一个全新的实例还是转到已经打开的实例。我这样做是为了尝试查看用户 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 的位置并使用它的完整路径。

4

1 回答 1

1

您的列表理解将超出范围,因为您永远lst[len(lst)]无法获得IndexError. 包装器str()不需要打印len(arr)

相反,使用切片[:2]来删除前 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))
于 2020-11-24T12:57:03.283 回答