0

スクリーンショットを撮り、ディスクに保存せずにそのスクリーンショットでコマンドを実行しようとしています。

私が実行したい実際のコマンドはvisgrep image.png pattern.pat

visgrep画像ファイルと.patファイルの2つの引数が必要です。

これが私がこれまでに持っているものです。

p = subprocess.Popen(['import', '-crop', '305x42+1328+281', '-window', 'root', '-depth', '8', 'png:' ], stdout=subprocess.PIPE,)
cmd = ['visgrep']
subprocess.call(cmd, stdin=p.stdout)

visgrepには2つの引数が必要なので、明らかにこれは失敗します。

visgrep image.png pattern.patでは、どうすれば「image.png」をImageMagickの出力に置き換えることができimportますか?

xargsを使用する必要がありますか?私がしようとしていることを達成するためのより良い方法はありますか?

4

3 に答える 3

0

この回答によると、引数png:をに変更png:-すると、インポートコマンドはファイルではなく標準出力に出力されます。私はvisgrepに慣れていないので、stdinからソースイメージを読み取るように指示する方法がわかりません。

于 2013-01-15T16:37:50.160 に答える
0

Linuxでは/dev/stdin、ファイル名として使用できますが、常に機能するとは限りません。で動作しない場合はvisgrep、一時ファイルを使用する必要があります(これは残念ではありません)。

PS。すべきではpng: ないpng:-

于 2013-01-15T16:41:23.080 に答える
0

ImageMagickのドキュメントから:

STDIN、STDOUT、およびファイル記述子

UnixおよびWindowsでは、あるコマンドの出力を別のコマンドの入力にパイプすることができます。ImageMagickを使用すると、-の疑似ファイル名を使用して、標準ストリームSTDIN(標準入力)およびSTDOUT(標準出力)からそれぞれ画像データの読み取りと書き込みを行うことができます。この例では、convertの出力を表示プログラムにパイプします。

$ convert logo: gif:- | display gif:-

前の例では、2番目の明示的な形式「gif:」はオプションです。GIF画像形式には画像内に固有の署名があるため、ImageMagickの表示コマンドは形式をGIFとして簡単に認識できます。変換プログラムは、次のように入力としてSTDINも受け入れます。

$convert rose: gif:- | convert - -resize "200%" bigrose.jpg

コマンドで同じファイル名規則を使用できますimport

だから、試してみてください:

p = subprocess.Popen(['import', '-crop', '305x42+1328+281', 
                      '-window', 'root', '-depth', '8', 'png:-' ], 
                      stdout=subprocess.PIPE,)
于 2013-01-15T17:02:40.913 に答える