Python String to BSTR - PullRequest
       43

Python String to BSTR

2 голосов
/ 10 октября 2011

Я использую интерфейс iTunes COM в Windows 7. Метод iTunes.CurrentTrack.AddArtworkFromFile (путь) требует, чтобы путь был типа BSTR.

Из некоторых исследований я понимаю, что BSTR является C ++ / VisualБазовый тип данных, который означает базовую строку.

Есть ли способ преобразования строк Python Ascii в BSTR?

код:

import urllib
from BeautifulSoup import BeautifulSoup
import re
import win32com.client
import sys





iTunes = win32com.client.gencache.EnsureDispatch("iTunes.Application")

cTrackName = iTunes.CurrentTrack.Name
cArtist = iTunes.CurrentTrack.Artist
cAlbum = iTunes.CurrentTrack.Album

print cAlbum + cArtist + cTrackName
url = 'http://www.last.fm/music/'+cArtist+'/'+cAlbum
albumPage = urllib.urlopen(url).read()
soup = BeautifulSoup(albumPage)
s =  soup.prettify()
z = re.compile('.*<img  width="174" src="(.*)" class="art"  id="albumCover" itemprop="image" class="albumCover coverMega"  />')
p = re.findall(z,s)
print p
urllib.urlretrieve(p[0],'a.png')
a = urllib.quote('file://localhost/C:/Users/ArchAngel/Desktop/a.png')
iTunes.CurrentTrack.AddArtworkFromFile('file://localhost/C:/Users/ArchAngel/Desktop/a.png')
#print binascii.a2b_uu('sadsaffas')
iTunes.CurrentTrack.AddArtworkFromFile(b'C:\Users\ArchAngel\Desktop\a.png')

Ошибка: pywintypes.com_error: (-2147352567, «Возникло исключение.», (0, Нет, Нет, Нет, 0, -2147467259), Нет)

1 Ответ

3 голосов
/ 10 октября 2011

Поскольку вы используете Python 2.x, я считаю, что вам просто нужно использовать unicode вместо str, а win32com сделает все остальное.Однако я бы ожидал, что win32com автоматически преобразует str в unicode для вас.

Вы должны написать это так:

iTunes.CurrentTrack.AddArtworkFromFile(u'file://localhost/C:/Users/ArchAngel/Desktop/a.png')

Если это не сработаетЯ думаю, что ваша проблема лежит в другом месте.

...