这是我的第一个问题,我希望我能做到这一点。 让我们说我有这个文件:
" 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 ,只有其他文件
非常重要提前致谢:)
答案 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),我使用了三个文件。
这三个文件的顺序与上面相同。
您不需要打印输出,但是我将在文件示例下面包含终端输出。 子流程文件:
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'