Python スクリプトに、外部プロセスをセットアップして使用するかどうかを指定するフラグがあります。このプロセスは呼び出されるコマンドmy_command
であり、標準入力からデータを取得します。これをコマンドラインで実行するとしたら、次のようになります。
$ my_command < data > result
data
Python スクリプトを使用して、標準入力を変更して にフィードすることにより、の行を生成したいと考えていますmy_command
。
私はこのようなことをしています:
import getopt, sys, os, stat, subprocess
# for argument's sake, let's say this is set to True for now
# in real life, I use getopt.getopt() to decide whether this is True or False
useProcess = True
if useProcess:
process = subprocess.Popen(['my_command'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
for line in sys.stdin:
# parse line from standard input and modify it
# we store the result in a variable called modified_line
modified_line = line + "foo"
# if we want to feed modified_line to my_command, do the following:
if useProcess:
process.stdin.write(modified_line)
# otherwise, we just print the modified line
else:
print modified_line
ただし、my_command
データを受信しないかのように動作し、エラー状態で終了します。私は何を間違っていますか?
編集
私の Python スクリプトの名前がmy_Python_script
. 通常、標準入力を介してmy_command
呼び出されるファイルを渡すとしましょう。data
$ my_command < data > result
しかし今、私はmy_Python_script
代わりにそれを渡しています:
$ my_Python_script < data > some_other_result
の内容でmy_Python_script
実行されるサブプロセスを条件付きで設定したい(に渡される前にによって変更される)。これはもっと理にかなっていますか?my_command
data
my_Python_script
my_command
スクリプト言語として使用bash
していた場合、2 つの関数のいずれかを実行することを条件付きで決定します。データの行を にパイプしmy_command
ます。もう一方はそうしません。これは Python で実行できますか?