python .exe файл не открывается / не запускается - PullRequest
0 голосов
/ 01 апреля 2020

Я написал файл python в визуальном студийном коде с анакондой в качестве переводчика. Я использовал pyinstaller, чтобы превратить файл в exe, но когда я пытаюсь открыть exe, окно cmd мигает, открывается на секунду, а затем закрывается. Я не знаю, почему он не открывается. Моя программа должна считывать и распечатывать определенные c данные, запрошенные пользователем из файла HDF5, и это именно так и делается в коде Visual Studio. Мне действительно просто нужен способ, чтобы кто-то мог запустить его на другом компьютере с python не установленным.

Вот весь мой код, я знаю, что он, вероятно, плох, потому что у меня не так много python опыта, но работает в визуальной студии код:

import numpy as np
import h5py

print ("Make sure to move the HDF file to the folder where this program is located.")
valid = "valid"

#gets the file name and checks if file exists
while valid == "valid":
    filename = input("\nwhat is the name of the HDF file including the .hdf: ")
    try:
        with h5py.File(filename,"r") as hdf:
            path = hdf.get("/Results/Unsteady/Output/Output Blocks/Base Output/Unsteady Time Series/2D Flow Areas/Flow Area")
            break
    except IOError:
        print ("File not found")

#opens file
with h5py.File(filename,"r") as hdf:

    #navigates to file location
    path = hdf.get("/Results/Unsteady/Output/Output Blocks/Base Output/Unsteady Time Series/2D Flow Areas/Flow Area")
    path_items = list(path.items())

    #keeps running until user tells it to stop
    run = "y"
    while run == "y" or run == "Y" or run == "yes" or run == "Yes":

        #user input
        while valid == "valid":
            choice = input("\nWhich file would you like to get data from?  Depth, Face Shear stress, Face Velocity, or Water Surface: ")
            choice = choice.lower()
            if choice == "depth" or choice == "face shear stress" or choice == "face velocity" or choice == "water surface":
                break
            else:
                print ("Invalid")

        #checks the user input then converts the data set into a numpy array
        if choice == "depth":
            dataset = np.array(path.get("Depth"))
        if choice == "face shear stress":
            dataset = np.array(path.get("Face Shear Stress"))
        if choice == "face velocity":
            dataset = np.array(path.get("Face Velocity"))
        if choice == "water surface":
            dataset = np.array(path.get("Water Surface"))

        #gets the shape/size of the dataset
        shape = str(dataset.shape)
        shape = shape.replace("(","")
        shape = shape.replace(")","")
        shape = shape.split(",")
        timeAmount = shape[0]
        pointAmount = shape[1]
        timeAmount = int(timeAmount)
        pointAmount = int(pointAmount)
        timeAmount -= 1
        pointAmount -= 1
        print ("\nThis data set has",timeAmount,"time values and",pointAmount,"data values.")

        #user input
        while valid == "valid":
            time = input("\nEnter a single time step: ")
            try:
                int(time)
                break
            except ValueError:
                print ("Invalid")
        time = int(time)

        while valid == "valid":
            minR = input("\nEnter the first (smaller) value in a range of cell locations: ")
            try:
                int(minR)
                break
            except ValueError:
                print ("Invalid")
        minR = int(minR)

        while valid == "valid":
            maxR = input("\nEnter the second (larger) value in a range of cell locations: ")
            try:
                int(maxR)
                break
            except ValueError:
                print ("Invalid")
        maxR = int(maxR)

        #calculates all the numbers in the range between the two numbers
        rangeL = []
        while minR != maxR:
            rangeL.append(minR)
            minR += 1
        rangeL.append(maxR)

        #prints the value at each point
        count = 0
        for x in range(len(rangeL)):
            tempN = rangeL[count]
            tempV = dataset[time,rangeL[count]]
            print (str(tempN) + "," + str(tempV))
            count += 1

        #asks the user if they want to get more data
        run = input("\nWould you like to enter more parameters to get more/different data? (y/n): ")
        if run == "y" or run == "Y" or run == "yes" or run == "Yes":
            pass
        else:
            print ("Goodbye")
            break

1 Ответ

2 голосов
/ 01 апреля 2020

Возможно, потому что у вас есть код с несколькими выходами. Это означает, что программа выполняет эти строки очень быстро и в итоге закрывается. Запрос на ввод в конце вашего кода. Это должно заставить программу оставаться открытой.

...