2013-11-16 5 views
1

Я пишу простой скрипт для nautilus на Ubuntu, и я получаю странную ошибку: в функции передать переменную с выбранным файлом и это не работает, но если я напишу путь как строку (скопированную текстовым файлом, где скрипт написал переменную), он это делает!python: если я использую строку, функция работает, с переменной не

def estraiFile(elemento): 
    folder = os.path.dirname(elemento) 
    fl.write(elemento) 
    metadata = pyexiv2.ImageMetadata(elemento) #NOT WORKING  
    metadata.read() 
    tag = metadata['Exif.Image.DateTime'] 
    new_data = tag.value.strftime('/%Y-%m-%d %H:%M:%S.jpg')  
    new_tempo = cartella + str(new_data) + estensione 
    new_name = cartella + str(new_data) 
    os.rename(elemento, new_name) #if I change elemento with a string copied from fl,WORKS! 
    return 
+2

Распечатайте фактическое значение 'elemento' и посмотреть, что это такое. – BrenBarn

+0

Каково значение в каждом из элементов 'elemento',' new_data', 'new_tempo',' new_name'? Это самый элементарный метод отладки; напечатайте значения, чтобы вы знали, с чем связан ваш код. Что именно вы переходите к функции: продемонстрируйте с вызовом функции. –

+0

elemento происходит из 'os.getenv (« NAUTILUS_SCRIPT_SELECTED_URIS »)' и я не знаю, как его печатать на консоли (я не получаю ни одного), и поэтому, как писал, я печатаю его в текстовом файле ('fl.write (elemento) '), и это paht, и если я скопирую его вместо elemento, функция будет работать – user1835905

ответ

1

in a function a pass a variable with the selected file and it doesn't work but if I write the path as string (copied by a text file where the script wrote the variable) it does!

Наиболее вероятным источником ошибки является то, что копирование и вставка является сохранение кодирования разницы символов, которые вы не можете увидеть или воспроизвести вручную (возможно нормированный против ненормированного юникода).

Чтобы увидеть разницу, добавьте это добавить первую строку estraiFile():

print(repr(elemento)) 

Unicode может сделать это трудно понять основную причину без диагностики, такие как это.

Добавление:

Ваш комментарий, мы можем "невидимая" разница. Строка, '/media/photos/pippo/q.jpg\n' имеет '\n' в конце (это символ новой строки). Вы можете нарезать его с str.rstrip():

elemento = elemento.rstrip() 
+0

'/media/photos/pippo/q.jpg\n' – user1835905

+0

Это проблема с обратной косой чертой. Добавьте это в свой файл: '' elemento = elemento.rstrip() ''. –

Смежные вопросы