2012-06-09 56 views
0

我想使用Python轉儲SQLite數據庫到7-zip存檔(在Windows下)。我有以下代碼:使用python子進程管道從SQLite輸出到7-zip

import os 
import subprocess 
DatabaseName = os.path.join('C:\\','Database.sqlite') 
ArchiveName = os.path.join('C:\\','temp.7z') 
FileName = 'trial.txt' 
command = 'sqlite3 %s < C:\\\\SQLite3\\DumpToSTDout.txt | 7z a %s -si%s' % (DatabaseName, ArchiveName, FileName) 
print command 
DumpProc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
DumpProc.wait() 
print DumpProc.stdout.read() 
print DumpProc.stderr.read() 

C:\ SQLITE3 \ DumpToStdout.txt是與「.OUTPUT標準輸出」上的第一行和「使用.dump」在第二行上的文本文件。

當我運行這段代碼,我得到了以下錯誤:

sqlite3: Error: too many options: "C:\\SQLite3\DumpToSTDout.txt" 
Use -help for a list of options. 

但是如果我把打印命令,並直接在命令窗口中運行它,它正常運行。

我在做什麼錯?

+1

使用'DumpProc.communicate()'來避免死鎖 – jfs

+0

好點,謝謝。 – MatlabSorter

回答

2

由於您使用的是特定於shell的字符(<|),因此需要在Popen()調用中使用shell=True運行該命令。

+0

光榮 - 謝謝! – MatlabSorter