Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

bvmou

macrumors newbie
Original poster
Apr 4, 2008
3
0
I wrote a small no-input python program to sync recent iTunes podcasts to a BlackBerry; it works great from a terminal but I would like to share it with my old man and whoever. The only output is dialogue as files copy. Is there a way to make a desktop or dock shortcut to something that runs in a shell? No suggestion is too obvious, I am just back to the Mac after ages away. Script posted below, any help very much appreciated.

PHP:
#!/usr/bin/python

import os, getpass, shutil

def getOSSpecificFilepath():
	if os.path.exists('/boot/grub'):
		return '/home/'+getpass.getuser()+'/podcasts/current/'
	elif os.path.exists('/Users'):
		return '/Users/'+getpass.getuser()+'/Music/iTunes/iTunes Music/Podcasts/'
	elif os.path.exists(r'C:\\'):
		return 'C:\\Users\\'+getpass.getuser()+'\\music\\itunes\\itunes music\\podcasts\\'
	else:
		print 'problem getting os specific filepath'

def getDevicepath():
	if os.path.exists('/media/BB'):
		return '/media/BB/BlackBerry/music/podcasts/'
	elif os.name is 'posix':
		return '/Volumes/BB/BlackBerry/music/Podcasts/'
	elif os.name is 'nt':
		return r'E:\\BlackBerry\\music\\Podcasts\\'
	else:
		print 'problem getting os device filepath'

def checkDevicepath():
	if not os.path.exists(getDevicepath()):
		os.mkdir(getDevicepath())

def allFiles(filepath, depth, flist=[]):
	fpath=os.walk(filepath)
	fpath=[item for item in fpath]
	while depth < len(fpath):
		for item in fpath[depth][-1]:
			flist.append(fpath[depth][0]+os.sep+item)
		depth+=1
	return flist

def getFilelist():
	a = getOSSpecificFilepath()
	b = allFiles(a, 1)
	return b

def getDevicelist():
	a = getDevicepath()
	b = os.walk(a)
	c = [item for item in b]
	return c[0][-1]

def getMtimeList(filelist):
	tmplist = []
	for item in filelist:
		tmplist.append(os.stat(item).st_mtime)
	return tmplist

def getMtimeDict(filelist):
	tmpdict = {}
	for item in filelist:
		tmpdict[os.stat(item).st_mtime] = item
	return tmpdict

def getUpdatedList(filelist, mtimelist, mtimedict):
	tmplist = []
	a = sorted(mtimelist)
	for item in a:
		tmplist.append(mtimedict[item])
	return tmplist

def defaultCast():
	a = getFilelist()
	b = getMtimeList(a)
	c = getMtimeDict(a)
	d = getUpdatedList(a, b, c)
	return d
	
def thoseThatFit(fulllist=defaultCast()):
	counter = -1
	tmplist = []
	tmpnum = 0
	targetsize = 1000000000
	while tmpnum < targetsize:
		tmplist.append(fulllist[counter])
		tmpnum += os.stat(fulllist[counter]).st_size
		if abs(counter) < len(fulllist):
			counter -= 1
		else:
			return tmplist
			break
	return tmplist


def cpFunction():
	dp = getDevicepath()
	a = thoseThatFit()
	b = getDevicelist()
	c = [item.split(os.sep) for item in a]
	c = [item[-1] for item in c]
	counter=0
	for item in b:
		if item not in c:
			try:
				os.remove(dp+item)
				print 'removed', item
			except:
				continue
	while counter <= (len(a)-1):
		if c[counter] in b:
			counter+=1
		elif 'm4v' in a[counter]:
			counter+=1
		else:
			print 'adding', a[counter], '...'
			shutil.copy2(a[counter], dp)
			counter += 1

checkDevicepath()
cpFunction()
 

kainjow

Moderator emeritus
Jun 15, 2000
7,958
7
You can give it a .command extension. This will then make it run in Terminal when double-clicked. However you need to give it the correct permissions to execute.
 

hhas

macrumors regular
Oct 15, 2007
126
0
There are also various third-party tools for converting Python (and other) scripts into double-clickable .app bundles, e.g. Platypus might be a good choice here, although there are other options such as py2app available depending on your needs.
 

bvmou

macrumors newbie
Original poster
Apr 4, 2008
3
0
Thanks guys, the .command extension was the missing bit for me (that should say it all), I am about to have a coffee and try the platypus thing as well.

As far as permissions on the user's side, will they have to chmod +x it, and could I put that in some sort of installer script?
 

bvmou

macrumors newbie
Original poster
Apr 4, 2008
3
0
Platypus might be a good choice here, although there are other options such as py2app available depending on your needs.

Platypus is unbelievable, it is absolutely perfect for this use. I just got something going 1/3 through the cup of coffee. Thanks so much to both
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.