2011-11-15 10 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ボックスに基づいてファイル名を入力し、ユーザーがそのボックスを編集することを許可しないので、ユーザーがファイル名をincorectly入力する方法はありません。

エラーテキスト:

C:/ DocumentsとSettings/XPMUser /デスクトップ/ SRC/database.sqlに

ルート

システムは、指定されたファイルを見つけることができません。

OS COMMANDあなたが記述問題のようなものが発生しますファイル名にスペースがある場合は

+0

を使用し、

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

より良いような何かをしたい、まだあります。 – retracile

答えて

2

に失敗しました。シェルはスペースを区切り文字として解析します。あなたはまた、参考になる見ているエラーの完全なテキストを与えるsubprocessモジュール

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

私はシステムが私に与えたファイル名を考えていませんでした。いったんコードから離れてコンソールを見直してしまえば、ファイル名のパスに空白があります。 – Doomloard

関連する問題