如何自动将生成的数字输入到程序中作为输入

时间:2013-06-06 23:19:54

标签: python combinations

我有这个脚本,它会获取你给它的数字,并为你提供所有可能的组合。

import itertools
import sys
perms = itertools.permutations([1,2,3])

for perm in list(perms):
    print perm

我希望它能够完成生成后将它们作为输入放入另一个程序或脚本中。例如,我为1 2 3生成所有可能的组合,然后将这些数字插入受密码保护的.py?

2 个答案:

答案 0 :(得分:2)

您可以将输出传输到其他程序 例如:

> program2 | program1

将运行program1并将输出发送到program2然后运行。

答案 1 :(得分:1)

最简单的方法是从Python外部 - 使用shell管道,如Jean-Bernard Pellerin所示,或者只是将数据存储在具有已知位置的文件中。

但是如果你想在Python中完成所有这一切,让一个程序驱动另一个程序,你也可以这样做。

subprocess模块允许您运行其他程序,并控制其输入和输出等。例如:

import itertools
import subprocess
import sys

perms = itertools.permutations([1,2,3])

child = subprocess.Popen(['python', 'password_protected.py'], stdin=subprocess.PIPE)

for perm in list(perms):
    child.stdin.write('{}\n'.format(perm))

retcode = child.wait()
sys.exit(retcode)

从名称来看,我猜你实际想要做的是反复运行其他程序,每次进行一次,并使用返回代码或输出执行某些操作。为此,您只需将subprocess内容移动到循环内。但是如果你不想把东西传给孩子,你也可以让它变得更简单。

例如,如果password_protected.py在您输入密码错误时退出,则可以执行以下操作:

import itertools
import subprocess
import sys

perms = itertools.permutations([1,2,3])

for perm in list(perms):
    child = subprocess.Popen(['python', 'password_protected.py'], stdin=subprocess.PIPE)
    child.communicate('{}\n'.format(perm))
    if child.returncode != 2:
        print '{} is the password!'.format(perm)
        break
相关问题