我知道這個問題的一部分已經被問過,但我有一些相關的問題。python subprocess和mysqldump
我試圖執行
mysqldump -u uname -ppassword --add-drop-database --databases databaseName | gzip > fileName
我可能傾倒非常大(200GB?)分貝。這本身就是一件愚蠢的事情嗎?然後我想通過網絡發送壓縮文件進行存儲,刪除本地轉儲,並清除一些表格。
無論如何,我正在使用這樣的子進程,因爲似乎沒有辦法在沒有子進程的情況下執行整個原始調用。以表格名稱。:
from subprocess import Popen, PIPE
f = open(FILENAME, 'wb')
args = ['mysqldump', '-u', 'UNAME', '-pPASSWORD', '--add-drop-database', '--databases', 'DB']
p1 = Popen(args, stdout=PIPE)
P2 = Popen('gzip', stdin=p1.stdout, stdout=f)
p2.communicate()
但後來我讀了通信緩存數據在內存中,這對我不起作用。這是真的?
我終於實現了,現在是什麼:當然
import gzip
subprocess.call(args, stdout=f)
f.close()
f = open(filename, 'rb')
zipFilename = filename + '.gz'
f2 = gzip.open(zipFilename, 'wb')
f2.writelines(f)
f2.close()
f.close()
這需要一萬年,我恨它。
我的問題: 1.我可以在非常大的分貝上使用我的第一種方法嗎? 2.我能否將mysqldump的輸出傳輸到套接字並在網絡上觸發它並在到達時保存它,而不是發送壓縮文件?
謝謝!
相關:我如何使用subprocess.Popen連接管由多個進程?](http://stackoverflow.com/q/295459/4279) – jfs