我运行一个java程序作为子进程,但是当我将stderr重定向到管道时,程序挂起。例如myProcess = subprocess.Popen(cmd, shell=True, stdout = subprocess.PIPE)
工程,但myProcess = subprocess.Popen(cmd, shell=True, stdout = subprocess.PIPE, stderr=subprocess.PIPE)
挂起。当stderr被传送时,python子进程挂起
我运行的命令是沿着线的东西:
java -DSomeVals -classpath <somevals> package.Name
标准错误输出产生大量的,我记得读书的地方,有壳=真可能会导致死锁。不幸的是,当我设置shell = False时,我得到一个错误消息,文件名太长。
我试过myProcess = subprocess.Popen(['java', args], shell=False, stdout = subprocess.PIPE, stderr = subprocess.PIPE)
但是后来java抱怨说它找不到我想要运行的类。
我想管道stderr,因为它混乱我的程序的输出。
你以后如何处理来自管道的数据?大部分的python文档都说要使用通信,但是如果你不关心stderr的内容,那么可以像stderr = open(“/ dev/null”)这样那么它会泄露文件描述符),否则你需要使用'communicate()'这样的东西来缓冲两个管道,以防止输出触发死锁。 – Petesh 2014-10-26 18:30:53
我打电话沟通,但只有在该过程已运行约5分钟后(需要很长时间才能生成我需要的结果)。与此同时,应用程序每隔几秒就会写一条日志消息。 – ventsyv 2014-10-26 22:30:57