我有这个脚本,它会获取你给它的数字,并为你提供所有可能的组合。
import itertools
import sys
perms = itertools.permutations([1,2,3])
for perm in list(perms):
print perm
我希望它能够完成生成后将它们作为输入放入另一个程序或脚本中。例如,我为1 2 3生成所有可能的组合,然后将这些数字插入受密码保护的.py?
答案 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