Открытие файла в папке pwdir в Python через Applescript - PullRequest
2 голосов
/ 22 июля 2011

Открытие файла, доступного во временной папке текущего рабочего каталога на python

Я пытался

pwdir=os.getcwd()
tempdir=pwdir+"/temp/test.txt"
f=open(tempdir,'r+')

Когда я печатаю путь к tempdir, он отображается правильно, а также содержимоеФайл также читается.

Когда я пытаюсь объединить эту операцию из Applescript, который вызывает этот скрипт Python.Я получаю ошибку, подобную этой

f=open(pwdir1,'r+')
IOError: [Errno 2] No such file or directory: '//temp/test.txt'" number 1

РЕДАКТИРОВАТЬ:

Я использую сценарий оболочки из Applescript, чтобы вызвать этот pythonscript

do shell script "/Users/mymac/Documents/'Microsoft User Data'/test.py"

РЕДАКТИРОВАТЬ:

Код Python:

tempdir = os.path.join(os.getcwd(),'temp','htmlinput.html')
print tempdir
with open(tempdir) as f:
    html=f.read()

Вывод Python из терминала: (отлично работает)

/Users/mymac/Documents/Microsoft User Data/Outlook Script Menu Items/temp/htmlinput.html

Я также могу видеть содержимое файла.

Код Applescript:

do shell script "/Users/mymac/Documents/'Microsoft User Data'/'Outlook Script Menu Items'/new.py"

Ошибка приложения:

error "Microsoft Outlook got an error: Traceback (most recent call last):
  File \"/Users/mymac/Documents/Microsoft User Data/Outlook Script Menu Items/new.py\", line 12, in <module>
    with open(tempdir) as f:
IOError: [Errno 2] No such file or directory: '/temp/htmlinput.html'" number 1

Ответы [ 2 ]

3 голосов
/ 22 июля 2011

Я не знаю Applescript - или OS X в целом. Похоже, что скрипт запускается из корневой папки, а os.getcwd () возвращает '/'. Каталог самого скрипта - sys.path[0] или имя текущего модуля - dirname(__file__) - если это один скрипт, а не пакет. Попробуйте один из следующих

import os, sys
tempdir = os.path.join(sys.path[0], 'temp', 'temp.txt') 

или

import os
tempdir = os.path.join(os.path.dirname(__file__), 'temp', 'temp.txt')
1 голос
/ 22 июля 2011

Двойная косая черта - твоя проблема.Правильный способ объединения имен файлов и путей в Python - с помощью os.path.join.Попробуйте:

tempdir = os.path.join(os.getcwd(), 'temp', 'test.txt')

Кроме того, вы, вероятно, должны делать:

with open(tempdir) as f:

, что обеспечит закрытие tempdir даже при наличии ошибки.

Редактировать:

Нам нужно посмотреть, что такое tempdir, когда скрипт вызывается AppleScript, а не когда он вызывается из терминала.Если вы сделаете

tempdir = os.path.join(os.getcwd(),'temp','htmlinput.html')
with open('/Users/mymac/Documents/temp.txt', 'w') as fwrite:
    fwrite.write(tempdir)

Что именно окажется в файле /Users/mymac/Documents/temp.txt?

...