0

我有这个脚本,它接受你给它的数字并给你所有可能的组合。

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

for perm in list(perms):
    print perm

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

4

2 回答 2

2

您可以将输出通过管道传输到不同的程序
示例:

> program2 | program1

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

于 2013-06-06T23:21:59.630 回答
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在您输入错误密码时以 retcode 2 退出,您可以这样做:

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
于 2013-06-07T18:13:31.660 回答