2011-11-15 86 views
0

我一直在研究一个需要MySQL转储并用用户提供的信息恢复数据库的项目。我不断收到一个文件无法找到错误,然后我的自定义错误调试说明。 OS命令失败。当文件明显存在时,找不到Python文件错误

try: 
    username = self.username.get() 
    password = self.password.get() 
    database = self.database.get() 
    file = self.filename 
    print str(username) 
    print str(file) 
    test = os.system("mysql -u" + username + " -p" + password + " " + database + " <" + file) 
    if (test != 0): 
     print "OS COMMAND FAILED" 
    else: 
     print "pass" 
    print test 

except: 
    print "fail" 
    print "Unexpected error:", sys.exc_info()[0] 
    raise 

我还会继续做研究,以防万一我找到解决方案。我一直在看os.system命令,但如果我在命令中指定了文件名,而不是从变量中检索,问题就会消失。

所有变量都从输入框中提取。当程序根据openfiledialog框填充文件名并且不允许用户编辑该框时,用户无法不经意地键入文件名。

错误文本:

C:/ Documents和设置/ XPMUser /桌面/ src目录/ database.sql

该系统找不到指定的文件。

OS命令失败

+0

给你看到的也将是有益的错误的完整文本。 – retracile

回答

2

如果在文件名中的空间,这将导致你所描述的那样的问题。 shell将分析空间为分隔符。您可能需要做一些像

import pipes 
... 
database + " < " + pipes.quote(filename) 

更重要的是,使用subprocess模块

test = subprocess.call(['mysql', '-u', username, '-p', password, database], 
    stdin=open(file)) 
+0

谢谢我甚至没有想到系统给我的文件名。一旦我离开代码并重新查看控制台,我意识到文件名路径有空格感谢。 – Doomloard

相关问题