一个Python脚本为另一个python脚本提供“用户输入”

时间:2014-02-19 08:43:44

标签: python input automation python-2.x

这是我的第一个问题,我希望我能做到这一点。 让我们说我有这个文件:

" simple.py":

a=raw_input("your name?")
print "Hello",a

但是使用不同的脚本,我想执行" simple.py"许多时间并自动输入,这将像:

" everyone.py"

run simple.py input=Alice
run simple.py input=Bob
...

得到 "您好Alice" " Hello Bob" ...

我知道可以制作" everyone.py"跑" simple.py"通过使用os.system,但有没有任何实际的方法来做这样的事情?如果第一个脚本多次请求输入怎么办?

我不能编辑SIMPLE.PY ,只有其他文件

非常重要

提前致谢:)

3 个答案:

答案 0 :(得分:9)

对于像simple.py这样简单的案例,您应该可以使用subprocess.Popen

import subprocess

child = subprocess.Popen(['python', 'simple.py'], stdin=subprocess.PIPE)
child.communicate('Alice')

对于更复杂的情况,Pexpect模块可能很有用。它通过提供更方便,更健壮的接口来发送输入,等待提示和读取输出,从而有助于自动化与常规交互式程序的交互。它应该适用于Popen不起作用或更烦人的情况。

import pexpect

child = pexpect.spawn('python simple.py')
child.expect("your name?")
child.sendline('Alice')

答案 1 :(得分:1)

import sys
print "Hello",sys.argv[1]

运行C:\Python26\python.exe simple.py Alice会产生

  

Hello Alice

这里有一个关于如何从系统输入python应用程序的好例子:

由于您没有提及您无法修改simple.py,因此您需要自动将输入 raw_input(),而最简单的方法就是将数据作为“输入”输入到脚本中:

  

C:>回声“爱丽丝”|运行simple.py

答案 2 :(得分:0)

不幸的是,以上答案都对我没有用,所以我想出了第三种解决方案供其他人尝试。

要将输入从一个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'