繁体   English   中英

如何从另一个python脚本(或php执行)向python脚本发送“用户输入”?

[英]How can I send “user input” to python script from another python script (or php execute)?

我正在使用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函数在每次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),我使用了三个文件。

  1. 用于运行子进程的文件
  2. 输出文件(非常简单)
  3. 需要输入的文件

以下是与上述顺序相同的三个文件。

您不需要打印输出,但我会在文件示例下面包含终端输出。 子进程文件:

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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM