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 框架中运行此代码时,您实际上并没有 shell,这会导致问题。

或者,您不能重用stdoutstdin从您的 Web 服务器进程,并且尝试这样做subprocess.PIPE会导致事情挂起。

我假设您实际上并不需要运行pwd,并且只是将其用作示例,但是如果您真的只需要,pwd这是一种不必要的复杂方法。只需将其替换为os.curdir属性即可。

于 2012-08-05T15:01:18.570 回答