add ssh transfer

This commit is contained in:
david 2009-06-25 10:38:35 +02:00
parent 36d6899692
commit e4e4beac3a

View File

@ -8,55 +8,98 @@ import stat
import popen2 import popen2
import glob import glob
import sys import sys
import os
import pprint import pprint
import base64
import getpass
import os
import socket
import sys
import traceback
import paramiko
from subprocess import Popen from subprocess import Popen
paramiko.util.log_to_file('demo_sftp.log')
path = "/Users/david/Devel/arch/avr/code/snesram/roms/" if os.name == 'posix':
path = "/home/david/Devel/arch/avr/code/snesram/roms/"
username = "david"
hostname = "slap"
else:
path = "/Users/david/Devel/arch/avr/code/snesram/roms/"
username = "david"
hostname = "burst"
def shellquote(s): def shellquote(s):
return "'" + s.replace("'", "'\\''") + "'" return "'" + s.replace("'", "'\\''") + "'"
def main(): def main():
conn = sqlite3.connect('roms.sqlite3')
c = conn.cursor() port = 22
for i in [(4,),(8,),(16,),(32,)]: password = getpass.getpass('Password for %s@%s: ' % (username, hostname))
dirname = os.path.join(path,"%02i" % i) hostkeytype = None
if not os.path.isdir(dirname): hostkey = None
os.mkdir(dirname) host_keys = paramiko.util.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
print "#" * 60 if host_keys.has_key(hostname):
print "%i MBit" % i hostkeytype = host_keys[hostname].keys()[0]
print "#" * 60 hostkey = host_keys[hostname][hostkeytype]
c.execute('''SELECT print 'Using host key of type %s' % hostkeytype
rom_name, try:
rom_mb, print "Connect %s:%s" % (hostname, port)
file_name t = paramiko.Transport((hostname, port))
FROM t.connect(username=username, password=password, hostkey=hostkey)
roms sftp = paramiko.SFTPClient.from_transport(t)
WHERE
rom_mb = ? # dirlist on remote host
AND dirlist = sftp.listdir('.')
rom_hirom = 0 print "Dirlist:", dirlist
AND
rom_sram = 0
AND conn = sqlite3.connect('roms.sqlite3')
rom_type = 0 c = conn.cursor()
AND for i in [(4,),(8,),(16,),(32,)]:
rom_region like "Europe%" dirname = os.path.join(path,"%02i" % i)
ORDER BY file_name if not os.path.isdir(dirname):
''',i) os.mkdir(dirname)
for row in c: print "#" * 60
name,size,filename = row print "%i MBit" % i
if '[' not in filename: print "#" * 60
src = "david@burst:%s" % filename c.execute('''SELECT
command = ["scp",shellquote(src), dirname] rom_name,
proc = Popen(command) rom_mb,
print dir(proc) file_name
proc.communicate() FROM
roms
raise WHERE
>>>>>>> b7b35800ccc7b48d24cfd4c3e025482e95e3fc72:scripts/query_romsize.py rom_mb = ?
AND
rom_hirom = 0
AND
rom_sram = 0
AND
rom_type = 0
AND
rom_region like "Europe%"
ORDER BY file_name
''',i)
for row in c:
name,size,filename = row
filename_dst = os.path.join(dirname,os.path.basename(filename))
print "Remote: %s -> %s" % ( filename,filename_dst)
data = open(filename, 'r').read()
open(filename_dst,"w").write(data)
except Exception, e:
print '*** Caught exception: %s: %s' % (e.__class__, e)
traceback.print_exc()
try:
t.close()
except:
pass
sys.exit(1)
if __name__ == '__main__': if __name__ == '__main__':
main() main()