2011-01-13 14 views
9

私はPythonスクリプトから呼び出すPerlスクリプトを持っています。私はすべてを見てきており、成功していません。私は基本的に1つの変数を送信するPerlスクリプトを呼び出しようとしていますが、Perlスクリプトの出力は必要ありません。PythonのPerlスクリプトを呼び出す

var = "/some/file/path/" 
pipe = subprocess.Popen(["./uireplace.pl", var], stdin=subprocess.PIPE) 
pipe.stdin.write(var) 
pipe.stdin.close() 

だけまだ始まったばかりPythonプログラミング、私は上記の合計ナンセンスであると確信している:私は、これまでに作ってみた何

です。どんな助けでも大歓迎です。

答えて

7

、あなたがしています適切なトラックに。あなたが欠けていると思う唯一の事は、perlスクリプト自体が実行可能ではないということです。だからあなたはこれをする必要があります:

var = "/some/file/path/" 
pipe = subprocess.Popen(["perl", "./uireplace.pl", var], stdin=subprocess.PIPE) 
pipe.stdin.write(var) 
pipe.stdin.close() 
+0

スクリプト呼び出しの '。/'部分は役に立たず、最後の2行を見ることができません。最後の2行はバグにつながります!! – mouad

+0

絶対パスとperl実行ファイルを提供している場合、./は使用されていません。 –

1

私は希望thisがお手伝いします。それ以外の方法を知らないでください。

+0

参照していただきありがとうございます...それは作成され、activestateによってサポートされました..彼らはそれを落としたようですか? – Tagar

1

varをパラメータとしてstdinまたは両方に渡しますか?パラメータとして渡すために、それは標準入力にパイプに

subprocess.call(["./uireplace.pl", var]) 

を使用し、両方のコードスニペットを実行可能にuireplace.plを必要

pipe = subprocess.Popen("./uireplace.pl", stdin=subprocess.PIPE) 
pipe.communicate(var) 

を使用します。そうでない場合は、

pipe = subprocess.Popen(["perl", "./uireplace.pl"], stdin=subprocess.PIPE) 
pipe.communicate(var) 
2

subprocess.call()の方法をお試しください。呼び出すコマンドの出力は返されませんが、実行が成功したかどうかを示す戻りコードが返されます。

var = "/some/file/path" 
retcode = subprocess.call(["./uireplace.pl", var]) 
if retcode == 0: 
    print("Passed!") 
else: 
    print("Failed!") 

Perlスクリプトが実行可能であることを確認してください。そうでなければ、あなたはあなたのコマンドでPerlインタープリタを含めることができます(このようなもの):

subprocess.call(["/usr/bin/perl", "./uireplace.pl", var]) 
15

だけの操作を行います。あなただけのperlインタプリタにパイプを開きたい場合は

var = "/some/file/path/" 
pipe = subprocess.Popen(["perl", "uireplace.pl", var]) 
+1

ちょうどメモ:OPは彼が出力を得たくないと言うので、 'Popen'は必要ではありません。 'subprocess.call'や' subprocess.check_call'を使う方が良いでしょう。 – user225312

+3

@sukhbir:私は、OPが彼が出力を必要としないと言ったとき、私はまた、彼はまた、 'subprocess.call'や' subprocess'のようなperlスクリプトが終了するまで待たずにいると "仮定"していると思います。 check_callは行います:) – mouad

+0

確かに有効なポイントは+1です。 – user225312

関連する問題