写入另一个python程序raw_input而不会弹出一个新的黑屏
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了写入另一个python程序raw_input而不会弹出一个新的黑屏相关的知识,希望对你有一定的参考价值。
我试图暴力破解python程序: 我需要的是制作另一个将运行的python文件 带输入的第一个python代码(第一个代码接受raw_input的输入)
问题是第一个代码使用pygame,所以如果我想暴力,我需要运行它,尝试一个数字,然后再次打开它,并继续这样检查... 你知道如何写一个像bruteforce这样的进程raw_input吗?
这是我正在尝试做的精简版:(没有pygame)
第一个代码:(我需要暴力)
found = []
while 1:
a =int(raw_input("ENTER : "))
print "THE NUM: ", a
if a in [74,82,101,550,990]:
print a , " Got number right!"
found.append(a)
if [74,82,101,550,990] == found:
print "WINNER!!!!!"
break
这个没有pygame,但想法保持不变..
我尝试使用此代码:
import subprocess
for i in range(1000):
process = subprocess.Popen(["grep", "PATH TO PYCODE"],
stdin=subprocess.PIPE, stdout=subprocess.PIPE)
process.stdin.write(i)
print process.communicate()[0]
process.stdin.close()
但它给出了这个错误:
WindowsError: [Error 2] The system cannot find the file specified
并且路径是100%正确的...
编辑:如果我写在cmd:
echo 5 | python PATH_TO_FILE
它弹出这个错误:
EOFError: EOF when reading a line
谢谢你的帮助! :)
你有几个问题。
首先,顶级程序(我称之为check.py)不会在EOF上终止,它会抛出错误。其次,顶级程序被编写为交互式,但你是非交互式地使用它。删除“输入:”应足以解决此问题。
试试这个:
import sys
found = []
for line in sys.stdin:
line = line.strip();
a = int(line);
print "THE NUM: ", a
if a in [74,82,101,550,990]:
print a , " Got number right!"
found.append(a)
if [74,82,101,550,990] == found:
print "WINNER!!!!!"
break
第三,底部程序永远不会是WINNER,因为它会为每个猜测重新启动程序。第四,您正在将二进制值写入管道,但您的程序需要文本。
import subprocess
process = subprocess.Popen(["python", "check.py"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
for i in range(1000):
process.stdin.write("%d\n" % i)
print process.communicate()[0]
process.stdin.close()
在运行此功能之前,您可能希望从check.py中删除“THE NUM”打印输出。
但是,你的初始问题确实说你需要每次都重新启动pygame,所以在这种情况下你会像你原来那样把循环留在i
上 - 这不是你的示例程序所期望的。
这是输出,“THE NUM:”输出被注释掉:
$ python pipe.py
74 Got number right!
82 Got number right!
101 Got number right!
550 Got number right!
990 Got number right!
WINNER!!!!!
以上是关于写入另一个python程序raw_input而不会弹出一个新的黑屏的主要内容,如果未能解决你的问题,请参考以下文章
Python 2.7.3 IDEL中输入多行代码时,如何回车? x = raw_input("Enter Name:") print "Hey" + x