Мне кажется, это вопрос по питону больше, чем вопрос по AppleScript. Я имею в виду, если вы запрашивали основной текст через AppleScript, используя, скажем:
display dialog "Enter Note" default answer ""
AppleScript будет автоматически экранировать любые проблемные символы (то есть, если они введут c:\test\test.txt
, результатом этой команды отображения будет c:\\test\\test.txt
). Мне кажется, что вы получаете текст из какого-то другого источника и используете python для отправки его через AppleScript. Это означает, что вы должны избежать всего этого в python перед отправкой в osascript.
Побег довольно прост, аналитически: замените каждый обратный слеш двойным. В Python я думаю, что это будет что-то вроде:
body.replace('\','\\')
В зависимости от того, какой текст вы получаете, вам может понадобиться немного его настроить. Например, если у вас есть лысые двойные кавычки, вам нужно их избежать:
body.replace('"','\"')
и если у вас есть встроенные в текст табуляции, возврат каретки или перевод строки (\ t, \ r, \ n), вам, возможно, придется найти какой-то способ , избегающий экранирования ( вам, возможно, придется покопаться в регулярных выражениях для этого). Но идея состоит в том, чтобы сначала поместить escape-коды AppleScript в python, а затем вызвать команду osacript.
EDIT:
Теперь, когда я знаю, что вы получаете пользовательский текст из display dialog
, я собираюсь предложить вам вырезать посредника Python и обработать все это в AppleScript. Сценарий, который вы хотите это:
set txt to text returned of (display dialog "Please Enter The Note To Add To Your iCloud Notes" default answer "\n\n\n")
tell application "Notes"
tell account "iCloud"
make new note at folder "Notes" with properties {name:"myname", body:txt}
end tell
end tell
Вы можете сохранить это как файл сценария и вызвать его из osascript - osascript scriptName.scpt
- или вы можете ввести его непосредственно в osascript, используя последовательные опции -e:
osascript -e 'set txt to text returned of (display dialog "Please Enter The Note To Add To Your iCloud Notes" default answer "\n\n\n")' -e 'tell application "Notes"' -e 'tell account "iCloud"' -e 'make new note at folder "Notes" with properties {name:"myname", body:txt}' -e 'end tell' -e 'end tell'
если вам нужно передать аргументы в скрипт (например, переменную для имени пользователя или путь к иконке), вам нужно использовать явный обработчик выполнения. Посмотрите «man osascript» или спросите, и я покажу вам, как.