0

automator(mac os x 10.6.8のバージョン2.1.1)(python 2.6.1)のシェルスクリプトからpythonスクリプトを呼び出すときに回避策を見つけました。私の問題は、 os.system("mkdir foo") が subprocess.call("mkdir foo")もディレクトリを作成する(非常に具体的な)ケースで機能するが、その後、自動化ツールがエラーをスローすることです。

私の自動作成アプリの目的は、ドラッグ アンド ドロップされた画像を受け入れることです。automator アプリのアクションは 1 つだけです。次のコードを使用した「シェル スクリプトの実行」です。

for f in "$@"
do
    python dphoto_pythons/uploader.py $f > dphoto_pythons/auto_output.txt
done

$f は、ドラッグされた画像の名前です。(「シェル スクリプトの実行」は、入力を引数として渡すように設定されています。) ここに奇妙な部分があります。

「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"

問題なく動作しました。これについて少し戸惑った後、call を os.system に置き換えてみました。

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 に答える