【问题标题】:Python script providing input for other python programs为其他 Python 程序提供输入的 Python 脚本
【发布时间】:2019-02-11 22:23:37
【问题描述】:

我正在尝试自动化 Python 初学者课程的一些评分过程。学生们提供了一个 Python 程序,它会提示用户输入 5 个项目以及这 5 个项目的每月金额。然后学生显示预算,其中显示项目、每月金额和每年金额。我想编写一个 python 脚本来执行所有 65 个学生程序,并让程序为这 5 个项目和每月金额提供输入。我希望输入变量是列表中的随机变量和随机浮点数。从程序中执行此操作是否可行,或者是否需要从命令行提供变量和每月金额?总体目标是为 5 个项目和金额提供自动输入值,然后将学生的打印语句打印到控制台,从而更快地根据学生的输出提供评分。

现在,我的代码提示老师输入保存学生作业的目录的路径,并将每个文件路径存储在一个列表中。现在,我试图弄清楚如何执行列表中的每个 Python 文件,当每个学生的程序提示用户输入时,我的脚本将自动提供输入。提示字符串是特定的,它允许我指定项目与金额。例如。 "请输入项目1:"(输入项目名称)、"请输入项目金额:"(输入浮动金额)

这是我的伪代码:

import os

list_files = ["student1.py", "student2.py" ,....]

list_items = ["mortgage", "groceries", "insurance"]

list_amounts = [123.34, 1024.11, 32.3]

现在我需要弄清楚如何执行每个文件并让程序提供来自list_itemslist_amounts 的输入。我正在寻找解决此问题的最佳方法的建议。我宁愿让程序从这些列表中提供输入,而不是像通过参数那样让教师输入值。

例如, python student1.py mortgage 123.34 groceries 32.3 insurance 1024.11.

我该怎么做?最好不要通过argv[]

【问题讨论】:

  • 我不是 python 专家,也仍在学习,但也许您可以尝试编写一个异步函数,该函数在您的代码执行时运行,该函数负责将随机数放入输入提示
  • 我会说我的具体问题是“如何将我的 python 程序中的列表中的输入提供给另一个 python 程序?”我希望这会有所帮助。
  • 列出一个文件夹中的所有项目并使用subprocess 执行它们相对容易,唯一棘手的部分是提交变量:如果每个程序都需要不同的输入类型,那么你不是将能够自动化此
  • 这个问题可能对你有用*.com/questions/10673185/…
  • 每个程序都有相同的输入问题。 "enter item 1:" , "enter item amount:", "enter item 2: ", "enter item amount: "这两个问题在每个文件中以相同的顺序被问到最多 5 个项目。相同的 5 个输入字符串和浮点值对于所有提交的文件可以相同。

标签: python automation


【解决方案1】:

我认为问题是从 python 调用 python 程序,而不是 mortgage 123.34 groceries 32.3 insurance 1024.11 部分。

这是一种选择:

import subprocess
import shlex

for script in ["student1.py", "student2.py"]:
    command = 'python {} mortgage 123.34 groceries 32.3 insurance 1024.11'.format(script)
    proc = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    stdout, stderr = proc.communicate()
    print stdout
    print stderr

https://*.com/a/92395/6352677 中查看更多选项。

【讨论】:

  • 非常感谢您的建议。我收到 proc.communicate() 错误,它锁定并超时。我终于能够使用 os.system(command) 从我的分级程序执行学生 python 程序。现在我只需要我的评分程序自动为我输入用户提示。
【解决方案2】:

我不知道这是否是您想要的,但我会为您提供 2 条建议...

1) 用户输入 此解决方案可以添加到您的代码中,无论用户在提示中键入什么内容,输入变量都将被分配给列表的随机值:

import random
mylist = [i for i in range(0,20)]

amount1 = input("amount1")
if amount1:
    amount1 = random.sample(mylist, 1)

print(amount1)

2) 无需用户输入 只需消除用户在测试期间输入一些值的必要性,并直接从列表中分配一个随机值,而无需用户输入:

import random
mylist = [i for i in range(0,20)]

amount1 = random.sample(mylist, 1)

print(amount1)

3) JSON 文件? 如果您的老师将项目和金额数据存储在一个 json 文件中并执行的脚本访问它呢?

【讨论】: