1

convert.exeに名前が付けられた2つの実行可能ファイルがありますPATH。それらの1つはImageMagickからのもので、もう1つはWindowsからのものです。

user=> (clojure.java.shell/sh "where" "convert")
{:exit 0, :out "E:\\Program Files\\ImageMagick-6.8.3-Q16\\convert.exe\r\nC:\\Windows\\System32\\convert.exe\r\n", :err ""}

convert.exe内でImageMagickを実行したいと思いますclojure.java.shell/sh。通常、これはPowerShell内で実行できます。

PS E:\Users\bt> convert --version
Version: ImageMagick 6.8.3-8 2013-03-04 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2013 ImageMagick Studio LLC
Features: DPC OpenMP
Delegates: bzlib fontconfig freetype jng jp2 jpeg lcms lzma pango png ps tiff x xml zlib

ただし、これは内では機能しませんclojure.java.shell/sh

user=> (clojure.java.shell/sh "convert" "--version" :dir "E:/Users/bt")
{:exit 4, :out "", :err "Invalid drive specification.\r\n"}

最初は、ImageMagickへのパスを自分の前に移動して、PATHWindowsのバイナリよりも優先されるようにする必要があると思っていましたが、効果はありませんでした。また、PATHキックのためだけに最後に移動しました。それもうまくいきませんでした。

これを解決するために私が知っている唯一の代替手段は、実行可能ファイルのいずれかの名前を変更することです。しかし、コードを機能させるためだけに他の人にImageMagick / Windowsバイナリの名前を変更させたくないので、これは望ましくありません。

この情報が役立つ場合は、新しいコマンドシェル(PowerShellではなくcmd.exe)を開くことがで始まりC:\Windows\System32ます。これが実行可能ファイルの選択に影響を与える可能性があると感じていますが、よくわかりません。cmd.exeこれは、Launchyから実行した場合にのみ発生します。スタートメニューを使用すると、ホームディレクトリから起動します。

これを行う方法はありますか?明らかな何かが欠けているような気がします。

4

2 に答える 2

1

実行可能ファイルの絶対パスを指定してみてください。
お気に入り、

user=> (clojure.java.shell/sh "E:\\Program Files\\ImageMagick-6.8.3-Q16\\convert.exe" "--version" :dir "E:/Users/bt")

また

user=> (clojure.java.shell/sh "E:\\Progra~1\\ImageMagick-6.8.3-Q16\\convert.exe" "--version" :dir "E:/Users/bt")
于 2013-03-18T07:21:05.967 に答える
1

あなたの結果を再現できます。理由が何であれ、それはPATHを受け取るJavaのどこかに埋もれてRuntime.execいますが、Windowsシステムディレクトリを前に追加するのでしょうか? 徹底的に理解したい場合は、ここから調査を続けてください。

の呼び出しを参照してくださいsh

  (let [...
        proc (.exec (Runtime/getRuntime)
          (into-array cmd)
          (as-env-string (:env opts))
          (as-file (:dir opts)))]

ただし、実行可能ファイルへの絶対パスを指定すると機能します。したがって、問題を解決する方法は 2 つあります。

  • IM convert.exe が PATH の最初であると想定しても安全な場合は、質問で示したように「where」を実行し、:out返されたから最初のパスを取得し、それに追加convert.exeして、結果をプログラムとして使用します。にsh
  • 正しい PATH を想定できない場合は、Image Magick がインストールされている場所をユーザーに尋ねて、プログラムのパスをどこかに保存してください。これをプログラム パスの先頭に追加します。
于 2013-03-18T10:15:00.490 に答える