Я недавно переместил программу Python с одной машины на другую. После запуска программы (которая называется Main.py) из командной строки я получаю следующую ошибку:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1532, in __call__
return self.func(*args)
File "C:\Pyscan\Main.py", line 28, in callback
test.load_sets()
File "C:\Pyscan\test.py", line 107, in load_sets
tts = TTS()
File "C:\Pyscan\text2speech.py", line 9, in __init__
self.festival = Popen(['festival', '--pipe'], bufsize=0, stdin=PIPE)
File "C:\Python27\lib\subprocess.py", line 711, in __init__
errread, errwrite)
File "C:\Python27\lib\subprocess.py", line 959, in _execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
Это код для Main.py (файл, который я пытаюсь запустить)
#Login Script For Card-Botics
import MySQLdb
import getpass
from Tkinter import *
from PIL import ImageTk, Image
import os
import test
import webbrowser
working_directory = r'c:\Pyscan'
file_path = os.path.join(working_directory, 'Main.py')
#CONSTANTS
USERFILE = "c:/xampp/htdocs/mtgtradedesign/user.txt"
url = 'http://127.0.0.1/mtgtradedesign/index.php'
class MyFrame(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.b1 = Button(self, text="SCAN CARDS",command = self.callback)
self.b2 = Button(self, text="SEE RESULTS", command = self.callback2)
#Configure Button Sizes
self.b1.config( height = 3, width = 25 )
self.b2.config( height = 3, width = 25 )
# self.b2.bind('<Button-1>',lambda event:self.callback2())
self.b1.grid()
self.b2.grid()
def callback(self):
self.b1['state'] = DISABLED
test.load_sets()
def callback2(self):
self.b1['state'] = NORMAL
webbrowser.open('http://127.0.0.1/mtgtradedesign/index.php')
def update_username():
f = open(USERFILE, 'w')
f.write('%s' % username)
f.close()
def open_url(url):
webbrowser.open_new(url)
def main():
#Run The Class Which Puts The Tkinter windows z-index in the background every 100ms
mainw = Tk()
#Set The Window Title
mainw.title("Card-botics V1.1")
#Label
theLabel = Label(mainw, text="Welcome To The POP! Card-botics Program. To Scan your cards simply \n press the 'SCAN CARDS' button. When the Program makes a match, press 'B' to add \n it to your keyboard. When you are done scanning cards press 'E' to end \n your trade. Finally press the 'See Results' button to see your results! ")
theLabel.grid()
mainw.f = MyFrame(mainw)
mainw.f.grid()
#Place Window In Center
mainw.eval('tk::PlaceWindow %s center' % mainw.winfo_pathname(mainw.winfo_id()))
mainw.mainloop()
print "Welcome To Card-Botics V1.0 - Please Enter Your User Name and Password To Continue"
#Make connection to sql database
db = MySQLdb.connect(host = "localhost", user = "root", passwd = "", db = "mscan")
#Set Up Query
query = db.cursor()
loop = 'true'
while(loop == 'true'):
username = raw_input('Enter Your Username: ')
password = getpass.getpass('Enter Your Password: ')
if(query.execute("SELECT * FROM `users` WHERE `username` = '" + username + "' AND `password` = '" + password + "'")):
db.commit()
print "logged in"
update_username()
main()
else:
db.commit()
print "Failure. Please Try again"
Я исследовал это и сузил то, во что верю в проблему, но мне не повезло, что я решил ее. Насколько я могу судить, интерпретатор Python не перемещается в соответствующий каталог для файлов Main.py, test.py и text2speech.py
Python установлен в каталог C: \ Python27, а каталог, из которого я загружаю программу, - C: \ Pyscan
Я немного исследовал это, и некоторые из решений, которые я пробовал, такие как импортный подпроцесс и shell = true для обратных вызовов подпроцесса, но пока ничего из того, что я пробовал, не сработало.
У меня нет этой проблемы на компьютере, на котором изначально была написана программа. Это проблема пути с Python? Если это так, может кто-то здесь, пожалуйста, помогите мне решить эту проблему.
С уважением
Спенсер