从不以换行符结尾的Python子流程中获取提示

时间:2019-09-07 14:56:52

标签: python subprocess

我在Windows 10上使用Python3.x。我在使用子进程来执行命令,以使用FFmpeg从某些图像创建幻灯片。除了输出文件已经存在时,它通常可以正常工作。发生这种情况时,我会在stderr上收到一条消息,提示用户是否应该覆盖。此消息不会以换行符结尾。这是我当前正在使用的代码

with subprocess.Popen([FFMPEG_PATH, 
'-i', 'img_%03d.png',
'-vf', vfCommand,
'-hide_banner',
'-c:v', 'libx264',
'-pix_fmt', 'yuv420p',
'{0}'.format(vidOutputPath)]
, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) as outProcess:
    while outProcess.poll() is None:
        data = outProcess.stdout.read(1)
        data = data.decode()
        print(data, end='')

在最后一行使用print(data,end =''),我将看到格式正确的所有内容,但不会显示“文件存在覆盖[y / N]”提示。而如果仅执行print(data),则提示将仅在一行上显示一个字符。

我的最终目标是显示命令并允许用户对其进行响应。我不想使用shell = true,因为这样会打开程序来注入问题,并且如果可能的话,我不想在必须安装/下载python附加软件包的地方做任何事情。我想保留此位置,即使是基本用户也可以安装python并立即使用该程序。

0 个答案:

没有答案