1

以下のコードがハングする理由がわかりません。コンソールから実行するとすべて問題ありませんが、ブラウザから実行しようとするとページがハングします。Python 2.7.2 を使用しています。

class MyThread(threading.Thread):
    def __init__(self):
        self.stdout = None
        self.stderr = None
        threading.Thread.__init__(self, name="snapshot",)

    def run(self):
        p = subprocess.Popen(["pwd"], shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=None)
        p.communicate()

myThread = MyThread()
myThread.start()
myThread.join()

更新 Apache を CGI として Python を実行しています。実行中のシステムは Gentoo 2.1 です。

問題はApacheにあると思います。どういうわけか新しいスレッドをブロックしていますが、よくわかりません。

4

1 に答える 1

0

でこれを実行してみてくださいshell=False

Web フレームワークでこのコードを実行しているとき、実際にはシェルがなく、それが問題を引き起こしているのではないかと思います。

stdoutまたは、Web サーバー プロセスからandを再利用することはできません。再利用stdinしようとすると、subprocess.PIPEハングアップの原因になります。

実際に実行する必要はなくpwd、例として使用しているだけだと思いますが、本当に必要な場合、pwdこれは不必要に複雑な方法です。os.curdirこれを属性に置き換えるだけです。

于 2012-08-05T15:01:18.570 に答える