Python在AppleScript中:Automator中subprocess.call与os.system的区别
我找到了一种解决方法,可以在自动化工具(版本2.1.1,运行在mac os x 10.6.8上)中从一个shell脚本调用python脚本(python 2.6.1)。我遇到的问题是,当我用os.system("mkdir foo")时,它在某种特定情况下可以正常工作,而subprocess.call("mkdir foo") 也能创建目录,但会导致自动化工具报错。
我这个自动化应用的目的是接受一个被拖放到它上的图片。这个自动化应用只有一个动作:'运行shell脚本',代码如下:
for f in "$@"
do
python dphoto_pythons/uploader.py $f > dphoto_pythons/auto_output.txt
done
$f是被拖放的图片的名字。('运行shell脚本'设置为将输入作为参数传递。)这里有个奇怪的地方:
在'uploader.py'脚本中,我调用了这个:
retcode=call("mkdir " + dir_full, shell=True) # THIS CAUSES A ERROR IN AUTOMATOR
print "***DOESN'T GET HERE WHEN RUN IN AUTOMATOR****"
它能创建目录,但接下来的语句却没有执行。而且自动化工具会弹出一个错误对话框(上面只说让我检查我的脚本)。
相比之下,如果我在终端中'手动'调用uploader.py:
"python uploader.py someimage.jpg"
它就能顺利运行。
经过一番思考后,我尝试把call换成os.system:
os.system("mkdir " + stu_dir_full)
####retcode=call("mkdir " + stu_dir_full, shell=True) # BUG
这样在自动化工具和终端中都能正常工作。
我感觉我可能忽略了一些明显的东西,因为这个问题实在太奇怪了。不过我还是想把这个情况分享出来。你们有什么想法吗?
-Mel
1 个回答
0
你可以使用 os.mkdir(stu_dir_full) 来创建一个文件夹...
不过,你的 subprocess.call 这一行可能有问题,因为 subprocess.call 需要的是一个列表,而不是一个字符串。你可以试试这样:
retcode = call(["mkdir",dir_full], shell=True)