【问题标题】:Use Python to run interactive python scripts使用 Python 运行交互式 Python 脚本
【发布时间】:2014-01-27 20:22:06
【问题描述】:

我有 Python 脚本,它在运行时接受用户输入并提供一些输出。 示例代码:

import random
l1 = ['Bob', 'Eric', 'Dimitar', 'Kyle']
l2 = ['Scott', 'Mat', 'Con']
n = raw_input('Enter no. of persons:  ')
for i in range(int(n)):
    print random.choice(l1) + '  ' + random.choice(l2)

输出:

$ ./generate_name.py 
Enter no. of persons:  2
Kyle  Scott
Eric  Mat

现在我想编写另一个 Python 脚本,该脚本将使用特定输入多次运行第一个 Python 脚本(输入序列存储在列表中)并将输出记录在文件中。 此外,我无法对第一个 Python 代码进行任何更改。

我可以使用subprocess 模块来运行脚本并记录输出,但如何处理交互式用户输入部分?

【问题讨论】:

  • 如果您使用的是 Unix 风格的系统,您可能会使用管道...
  • 你的意思是像:subprocess.Popen('./generate_name.py <<< 2', shell= 1)。是的,那会奏效。非常感谢:)
  • 您可能应该使用Popenstdin 参数,而不是使用shell=True(或您不太惯用的版本)。

标签: python interactive


【解决方案1】:

我看到两个选项:您可以将其作为单独的进程运行,并且确实使用subprocess,例如

sp = subprocess.Popen(['./generate_name.py'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
sp.stdin.write("2\n")
sp.stdin.close()
answer = sp.stdout.read()
status = sp.wait()

或者你把你的脚本和exec它。在您这样做之前,您可以重定向sys.stdinsys.stdout,您可以捕获和监控您所做的所有更改。这样,您可以在一个进程中运行它。

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多