2015-03-15 8 views
0

У меня есть очень простой скрипт, который создает файл, как большой, как пользователь хочет:Py2Exe потерял ошибку sys.stdin?

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, 
) 

Я искал какое-то время, но не смогли найти какие-либо решения, применяются в данном конкретном случае. Я что-то пропустил? Любые идеи о том, как заставить его работать?

+0

Не уверен, что вы понимаете, но 'randmb()' генерирует только 32KiB, а не 1MiB. – mhawke

+0

@mhawke Это действительно не помогает –

+0

Извините за бесполезность. Тем не менее, это проблема в коде, о которой вы, возможно, не знали, и поэтому она размещена как комментарий, а не ответ. – mhawke

ответ

2

Вы создаете приложение с графическим интерфейсом Windows, для которого нет stdin. Вероятно, вы хотите, чтобы консольное приложение имело 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'}], - Я не уверен, что разница есть.

+0

Работает отлично. Спасибо чувак –