我无法理解为什么代码会出现问题。当我从控制台运行它时一切都很好,但是当我尝试通过浏览器运行它时页面挂起。 我正在使用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上。不知怎的,它阻止了新线程,但我不确定。
答案 0 :(得分:0)
尝试使用shell=False
运行此功能。
我怀疑当您在Web框架中运行此代码时,您实际上没有shell并且这会导致问题。
或者,您无法重复使用网络服务器进程中的stdout
和stdin
,并尝试使用subprocess.PIPE
来解决问题。
我假设您实际上并不需要运行pwd
并且您只是使用它作为示例,但如果您真的需要pwd
,这是一种不必要的复杂方法。只需将其替换为os.curdir
属性。