0

从 automator(mac os x 10.6.8 中的 2.1.1 版)(python 2.6.1)的 shell 脚本调用 python 脚本时,我发现了一种解决方法。我的问题是 os.system("mkdir foo") 在 subprocess.call("mkdir foo")也创建目录但随后使自动机抛出错误的(非常具体的)情况下工作。

我的自动化应用程序的目的是接受拖放到其上的图像。automator 应用程序只有一个操作:使用以下代码“运行 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****"

它使目录。但没有进入下一个语句。automator 会抛出一个错误对话框(它只是说我应该去检查我的脚本)。

相比之下,如果我从终端“手动”调用 uploader.py:

"python uploader.py someimage.jpg"

它工作顺利。在对此感到困惑之后,我尝试用 os.system 替换 call:

os.system("mkdir " + stu_dir_full)
####retcode=call("mkdir " + stu_dir_full, shell=True) #  BUG

这适用于自动机和终端。我有一种感觉,我忽略了一些明显的事情,因为这是一个非常奇怪的问题。但我想无论如何我都会把它放在那里。有什么想法吗?

-梅尔

4

1 回答 1

0

你可以使用 os.mkdir(stu_dir_full)...

但是您的 subprocess.call 行的问题可能是 subprocess.call 需要一个列表而不是字符串。尝试这个:

retcode = call(["mkdir",dir_full], shell=True)
于 2011-10-16T21:55:52.533 回答