通过Applescript在Python的pwdir文件夹中打开一个文件

时间:2011-07-21 22:01:22

标签: python macos scripting file-io applescript

在python中打开当前工作目录的临时文件夹中可用的文件

我试过

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

当我打印tempdir的路径时,它正确显示,并且还会读取文件的内容。

当我尝试从调用此python脚本的Applescript组合此操作时。我收到这样的错误

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

编辑:

我使用Applescript的Shell脚本来调用这个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 Code:

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

Applescript错误:

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 个答案:

答案 0 :(得分:3)

我一般不知道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 :(得分:1)

双斜线是你的问题。在Python中连接文件和路径名的正确方法是使用os.path.join。尝试:

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

另外,你可能应该这样做:

with open(tempdir) as f:

即使出现错误,也会确保tempdir关闭。

编辑:

我们需要查看AppleScript调用脚本时tempdir是什么,而不是从终端调用它时。如果你这样做

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到底有什么结果?