gpt4 book ai didi

python - 子进程 Popen 不适用于 pythonw.exe

转载 作者:太空狗 更新时间:2023-10-29 17:45:35 25 4
gpt4 key购买 nike

当我使用 pythonw.exe 在 Windows 上运行以下脚本时,我希望能够获取 stdout 和 stderr 的内容:

import subprocess
import sys
import os
import string
import time

tmpdir = 'c:/temp'
cmd = 'dir c:'

tmpfile = "tmp_%f" % (time.time())
tmpfile = os.path.normpath(os.path.join(tmpdir,tmpfile))
tmpfile2 = tmpfile+".bat"
tmpfile3 = tmpfile+".txt"

fa = open(tmpfile2,'w')
fa.write("@ECHO OFF > NUL\n")
fa.write('call '+cmd+"\n")
fa.close()

wcmd = []
wcmd.append(tmpfile2)

startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess._subprocess.STARTF_USESHOWWINDOW

fb = open(tmpfile3,'w')
fb.write("\n")
fb.write(tmpfile2+"\n")

try:
procval = subprocess.Popen(wcmd, startupinfo=startupinfo, stdout=subprocess.PIPE, stderr=subprocess.STDOUT).communicate()
fb.write(str(procval)+"\n")
fb.write("Sucess")
fb.close()
except:
fb.write(str(procval)+"\n")
fb.write("Failure")
fb.close()

当我使用 python.exe 执行它时,我得到了预期的输出。当我使用 pythonw.exe 运行它时我最终站在异常(exception)的一边。如果我仅使用命令和 startupinfo 标志运行 popen,该命令将成功完成,但无法访问子进程中的数据。我读到的所有内容都表明这应该有效,但一定会遗漏一些东西。任何帮助将不胜感激。

谢谢,兰迪

最佳答案

这可能是使用 pythonw.exe 时的错误

pythonw.exe 启动一个守护进程,该进程无法正常访问标准文件描述符。您在脚本中唯一需要做的就是为标准输入专门设置第 3 个 fd:

p = subprocess.Popen(wcmd,
startupinfo=startupinfo,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
stdin=subprocess.PIPE)
procval = p.communicate()

关于python - 子进程 Popen 不适用于 pythonw.exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10290990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com