Python Popen冻结

时间:2012-10-11 20:28:08

标签: python powershell subprocess popen

出于某种原因,在调用Powershell脚本后,Popen无法退出,并且命令的输出不是动态的。

我在代码中遗漏了什么:

sCmd = "powershell -file somefile.ps1"
process = subprocess.Popen(sCmd.strip(), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

while True:
    p = process.communicate()
    sys.stdout.write(p[0])
    sys.stderr.write(p[1])

    sys.stdout.flush()
    if(len(p[0]) == 0 and isinstance(process.poll(), int)):
        break

if(process.wait() != 0):
    os._exit(1)

1 个答案:

答案 0 :(得分:2)

验证您的powershell命令是否确实正确退出。挂起的PowerShell流程很容易成为原因。

此外,您不应该拥有shell=True。这是一个巨大的安全风险。它也可以解释为什么这个过程悬而未决。如果你的powershell脚本不会运行,除非shell=True然后修复它将是一个聚焦的好地方。