写入另一个python程序的原始输入而不会弹出新的黑屏

时间:2018-12-04 22:47:05

标签: python cmd subprocess stdin

我正试图强行使用python程序:
我需要制作另一个可以运行的python文件
第一个带有输入的python代码(第一个代码使用raw_input输入输入)

问题是第一个代码使用pygame,所以如果我想蛮力,我需要运行它,尝试输入一个数字,然后再次打开它,然后继续像这样检查...
你有什么想法如何像蛮力一样写到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

感谢您的帮助! :)

1 个答案:

答案 0 :(得分:1)

您有几个问题。

首先,顶层程序(我将其称为check.py)没有在EOF上终止,而是引发了错误。其次,编写的顶级程序是交互式的,但您是非交互式使用的。删除“ 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!!!!!