写入另一个 python 程序的原始输入而不弹出新的黑屏
Writing to another python program's raw input without popping a new black screen
我正在尝试暴力破解 python 程序:
我需要做的是制作另一个 python 文件,它将 运行
带有输入的第一个 python 代码(第一个代码使用 raw_input 输入)
问题是第一个代码使用pygame,所以如果我想暴力破解我需要运行它,尝试一个数字,然后再打开它,继续检查like那...
你知道如何像暴力破解一样写入进程 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 时终止,它会抛出错误。其次,top 程序被编写为交互式的,但您正在非交互式地使用它。删除 "INPUT : " 应该足以解决此问题。
试试这个:
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
第三,最底层的程序永远不会是赢家,因为它会为每次猜测重新启动程序。第四,您正在将二进制值写入管道,但您的程序需要文本。
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 程序:
我需要做的是制作另一个 python 文件,它将 运行
带有输入的第一个 python 代码(第一个代码使用 raw_input 输入)
问题是第一个代码使用pygame,所以如果我想暴力破解我需要运行它,尝试一个数字,然后再打开它,继续检查like那...
你知道如何像暴力破解一样写入进程 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 时终止,它会抛出错误。其次,top 程序被编写为交互式的,但您正在非交互式地使用它。删除 "INPUT : " 应该足以解决此问题。
试试这个:
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
第三,最底层的程序永远不会是赢家,因为它会为每次猜测重新启动程序。第四,您正在将二进制值写入管道,但您的程序需要文本。
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!!!!!