以下に示すコードがあります。
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
なぜこれが表示されるのですか? なぜ時間は一度しか動かないのですか? また、印刷ステートメントを引き続き表示するには、どのような変更を加える必要がありますか?