Pythonのsubprocess.Popenは、同じ標準出力を返すにもかかわらず、それはいけません

StackOverflow https://stackoverflow.com/questions/717120

質問

私は、Pythonのsubprocess.Popenと非常に奇妙な問題を抱えています。私は外部のexeファイルを複数回呼び出すと、リスト内の出力を維持するためにそれを使用しています。

あなたはこの外部のexeファイルを呼び出すたびに、それがを別の文字列のを返します。私はpopenのを使用して、数回それを呼び出す場合は、それはいつもの の同じ文字列を返します。 =: - O

popenのは、exeファイルをリコールせずに、標準出力から常に同じ値を返すように

に見えます。たぶん、実際に再びexeファイルを呼び出すことなく、キャッシュのいくつかの並べ替えをしています。

これは私のコードです:

def get_key():

    from subprocess import Popen, PIPE

    args = [C_KEY_MAKER, '/26', USER_NAME, ENCRYPTION_TEMPLATE, '0', ]
    process = Popen(args, stdout=PIPE)
    output = process.communicate()[0].strip()
    return output

if __name__ == '__main__':
    print get_key() # Returns a certain string
    print get_key() # Should return another string, but returns the same!

私が間違っている地球上の何をしているのですか?!

役に立ちましたか?

解決

C_KEY_MAKERのランダムな行動を秒単位で現在の時刻に基づいて、または類似している場合)

それは、あなたが別の出力を取得し、コマンドラインで二回、それを実行すると、時間が非常に実行され、間に変化している可能性があるが、 Pythonはそれを実行したときに、それは時間が変更されていないことなど立て続けに二回、それを実行し、それが2回連続で同じ値を返します。

他のヒント

何もありません。それは私自身のテスト(脇下部にあなたのインデントエラーから)に、正常に動作します。問題は、あなたのexeファイルのいずれかです。または他の場所でます。

を明確にするために、私はPythonのプログラムtfile.pyを作成した。

cat > tfile.py
#!/usr/bin/env python
import random
print random.random()

そして一番下にインデントの問題を取り除くために、そしてtfile.pyを呼び出すために間に合わないプログラムを変更。これは、2つの異なる結果が得られました。

私はあなたの例で間違って起こっているかわからない、私はもっとバイ・書籍のアプローチを試してみてくださいしかし、この動作を複製することはできません。

def get_key():

    from subprocess import Popen, PIPE

    args = [C_KEY_MAKER, '/26', USER_NAME, ENCRYPTION_TEMPLATE, '0', ]
    output = Popen(args, stdout=PIPE).stdout
    data = output.read().strip()
    output.close()
    return data
それが出て多くのお手伝いをするのは難しいそうであるように、

あなたのコードが実行可能ではありません。我々はそれを試してみることができるように、インデントや構文を固定し、それが自己完結することを検討します。

Linuxでは、デヴィンJeanpierreに応じて正常に動作するようです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top