0

処理のためにデータを送信できるjarファイルがあります。データはjson形式です。 data_pathデータを含むファイルへのパスです。以下はうまく機能します..しかし、私が持っているデータはファイルではなく、変数になります。以下のコマンドは変数では機能しません。ファイルへのリテラル ディレクトリ パスとして渡されたデータを読み取ろうとします。別の bash コマンドでしょうか。またはサブプロセスモジュールでできることはありますか? ありがとう!

import subprocess as sub

cmd = "java -jar %s < %s" % (jar_path, data_path)
# send data in a var
# cmd = "java -jar %s < %s" % (jar_path, data)
proc = sub.Popen(cmd, stdin=sub.PIPE, stdout=sub.PIPE, shell=True)
(out, err) = proc.communicate()
4

1 に答える 1

1

それを一時ファイルに書き込んで渡すことができます:

import tempfile

with tempfile.NamedTemporaryFile() as f:
    f.write(data)
    f.flush()
    cmd = "java -jar %s < %s" % (jar_path, f.name)
    ...

コンテキストが終了すると、一時ファイルはそれ自体を削除します。

@FedorGogolev は、特定のニーズに対して十分に機能していない Popen stdin アプローチへの回答を削除しました。しかし、それは良いアプローチだったので、彼の功績を称え、彼が目指していたものの実用的なバージョンを追加しようと思いました...

import tempfile

with tempfile.TemporaryFile() as f:
    f.write(data)
    f.flush()
    f.seek(0)
    cmd = "java -jar %s" % jar_path
    p = subprocess.Popen(cmd, shell=True, stdin=f, stdout=subprocess.PIPE)
    ...

ファイル オブジェクトをstdin引数として渡す場合は、最初に必ず 0 の位置までシークする必要があります。

于 2012-08-31T01:24:29.957 に答える