Py2Exe丢失了sys.stdin错误?

时间:2015-03-15 10:05:45

标签: python python-3.x py2exe

我有一个非常简单的脚本,可以创建一个与用户想要的一样大的文件:

from uuid import uuid4

global ammount
ammount = None

def randbyte():
    l = []
    a = uuid4().hex
    for char in a:
        l.append(str(char))
    return l[6]

def randkb():
    a = ''
    for num in range(0, 32):
        a = a + uuid4().hex
    return a

def randmb():
    a = ''
    for num in range(0, 32):
        a = a + randkb()
    return a

exit = False
print('##### DATA DUMP v1 #####')
while exit == False:
    ammount = input('AMMOUNT OF DATA TO DUMP IN BYTES >> ')
    try:
        ammount = int(arg)
        print('DUMPING...')
        b = int(ammount % 32)
        a = int(ammount - b)
        c = int(a / 32)
        with open('dump.txt', 'w') as file:
            for num in range(0, c):
                print('KB')
                a = uuid4().hex
                file.write(a)
            for num in range(0, b):
                print('B')
                a = randbyte()
                file.write(a)
        print('COMPLETED')
    except ValueError:
        print('ARGUMENT MUST BE AN INTEGER')

当我通过解释器运行它时工作正常。但是,当我通过py2exe,我总是得到以下错误:

Traceback (most recent call last):
  File "d.py", line 31, in <module>
RuntimeError: input(): lost sys.stdin

我的setup.py是这样的:

from distutils.core import setup
import py2exe
setup(
    options = {"py2exe": {'bundle_files': 2, 'compressed': True}},
    windows = [{'script': "d.py"}],
    zipfile = None,
)

我搜索了一段时间但找不到适用于这种特殊情况的任何解决方案。我错过了什么?关于如何使其发挥作用的任何想法?

1 个答案:

答案 0 :(得分:2)

您正在创建一个没有标准输入的Windows GUI应用程序。您可能想要一个具有stdin的控制台应用程序,因此您需要相应地进行设置。尝试将windows替换为console

from distutils.core import setup
import py2exe
setup(
    options = {"py2exe": {'bundle_files': 2, 'compressed': True}},
    console = ["d.py"],
    zipfile = None,
)

或者可能是console=[{'script': 'd.py'}], - 我不确定它有什么不同。