我正在使用 php 和 XAMPP 创建一个网站。该网站接受来自用户的 python 文件,然后它需要运行该 python 文件并接收该文件的所有输出。我已经能够通过在 php 文件中使用 shell_exec() 来完成此操作。
问题是获取用户输入的 python 文件。这些文件同时使用 input() 和 sys.stdin.readline() 函数。我需要能够自动发送 python 文件“用户输入”(有时是几个输入)。我确切地知道我需要发送什么和多少“用户输入”,所以这不需要我的干预。
我认为一种方法是改变提交的 python 文件的输入方式。如果我能做到这一点,那么我会将每个输入存储在一个将被迭代的列表中。不幸的是,我无法在提交的文件中编辑实际的输入命令,所以这必须在提交的 python 文件的顶部完成。
下面是 php 文件如何执行 python 文件。
$command = "python python_script.py";
$output = shell_exec($command);
echo nl2br($output);
我尝试使用 echo 函数(使用 && 表示多个输入),但唯一的问题是 echo 函数无法在每次回声后按 Enter 键。然而,这确实成功地将输入与输入提示匹配。下面是一个例子。python_script.py 应该接受输入然后打印它,但是 cmd 显示了这个:
C:\>(echo 2 && echo 3) | python python_script.py
number one: 2
number two: 3
C:\>
现在我正在尝试在单独的 python 文件中使用子进程函数。问题又是“用户输入”;我不知道如何发送输入。类似问题的解决方案对我不起作用,但我确定这是由于我对子流程功能缺乏了解。
我认为子流程是我最好的选择,但我也很感激任何使用 php 的建议。我也希望不必为此问题创建批处理文件。
我找到了解决这个问题的方法。
要将输入从一个 python 文件发送到另一个(python 3.7 版),我使用了三个文件。
以下是与上述顺序相同的三个文件。
您不需要打印输出,但我将在文件示例下方包含终端输出。子进程文件:
from subprocess import Popen,PIPE
p1 = Popen(["python","output_file.py"], stdout=PIPE)
p2 = Popen(["python", "input_file.py"], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close()
output = p2.communicate()[0]
print(output)
输出文件非常简单,可能有办法解决它。不过,这是我的版本:
print(1)
print(2)
print('My String')
输入文件需要对数字进行类型转换。
i = input('Enter a number: ')
j = input('Enter another: ')
k = int(i) + int(j)
print(k)
l = input('Tell me something. ')
print(l)
这是终端输出:
b'Enter a number: Enter another: 3\r\nTell me something. My String!\r\n'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句