相关疑难解决方法(0)

如何读取子进程的stdout的第一个字节,然后在Python中丢弃其余的?

我想读一个子进程'stdout的第一个字节,知道它已经开始运行了.之后,我想丢弃所有进一步的输出,这样我就不用担心缓冲区了.

做这个的最好方式是什么?

澄清:我希望子进程继续与我的程序一起运行,我不想等待它终止或类似的东西.理想情况下,有一些简单的方法可以做到这一点,而不是诉诸threading,forkmultiprocessing.

如果我忽略输出流,或者.close()它,如果发送的数据多于它可以容纳在其缓冲区中的数据,则会导致错误.

python subprocess stream

31
推荐指数
2
解决办法
1万
查看次数

子进程Popen不使用pythonw.exe

我希望能够在使用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()
Run Code Online (Sandbox Code Playgroud)

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

谢谢,兰迪

python subprocess

12
推荐指数
1
解决办法
4042
查看次数

标签 统计

python ×2

subprocess ×2

stream ×1