-1

以下に示すコードがあります。

import subprocess

def run_command(command):
        p = subprocess.Popen(command, shell=True,
                                stdout=subprocess.PIPE,
                                stderr=subprocess.STDOUT)

        while p.poll() is None:
                print "Loading mWorker... please wait"
                time.sleep(2)

        return p.communicate()

私はもともと p.communicate() は while ステートメントの前に置くべきだと思っていました。ただし、メソッドの最後に配置しないと、この関数呼び出しがハングすることがわかりました (たとえば、リターン プロンプトの後に何も表示されません)。上記のようにメソッドを実行すると、print ステートメントが 1 つだけ取得されます。

    Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "python.py", line 10, in run_command
    time.sleep(2)
NameError: global name 'time' is not defined

なぜこれが表示されるのですか? なぜ時間は一度しか動かないのですか? また、印刷ステートメントを引き続き表示するには、どのような変更を加える必要がありますか?

4

2 に答える 2

1

time モジュールをインポートしなかったため:

import subprocess
import time
...
#rest of your code

編集:

印刷メッセージが一度表示されるという事実は、それが機能していることを"Loading mWorker... please wait"意味しません。Python は、コマンドが来るとすぐに実行します。この場合、出力方法はわかっていますが、time定義されていないため、出力してから終了しtime.sleep(2)ます。
あなたは自分自身にそれを証明することができます.これらの2つのステートメントを逆にすると、もはやプリントを見ることさえできません.

于 2013-01-22T13:36:04.757 に答える
0

時間モジュールをインポートしていません。

于 2013-01-22T13:36:00.360 に答える