python stdout_python – 获取stdout以显示包含输入的调用脚本

我想要实现一个调用另一个脚本并捕获其标准输出的python脚本.被调用的脚本将包含一些输入和输出消息,例如

print ("Line 1 of Text")

variable = raw_input("Input 1 :")

print "Line 2 of Text Input: ", vairable

我正在运行的代码部分是

import subprocess

cmd='testfile.py'

p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)

so, se = p.communicate()

print(so)

发生的问题是stdout直到脚本执行后才打印.这会留下空白提示,等待用户输入.有没有办法让stdout在被调用脚本仍在运行时打印?

谢谢,

解决方法:

这里有两个问题.

>首先,python将输出缓冲到stdout,你需要阻止它.您可以像在Ilia Frenkel建议的那样在testfile.py中插入对sys.stdout.flush()的调用,或者您可以使用python -u来执行带有无缓冲I / O的testfile.py. (参见Ilia链接的other stack overflow question.)

>您需要一种从子进程异步读取数据的方法,然后在准备好输入时,打印您已读取的数据,以便显示用户的提示.为此,拥有asynchronous version of the subprocess module将是非常有帮助的.

我下载了异步子进程并重新编写了脚本以使用它,并使用python -u来获取无缓冲的I / O:

import async_subprocess as subprocess

cmd = ['python', '-u', 'testfile.py']

p = subprocess.Popen(cmd, stdout=subprocess.PIPE)

so = p.asyncread()

print so,

(so, se) = p.communicate()

print so

当我使用python -u运行此脚本时,我得到以下结果:

$python -u script.py

Line 1 of Text

Input 1:

并且脚本暂停,等待输入.这是期望的结果.

如果我输入一些内容(例如“Hullo”),我会得到以下内容:

$python -u script.py

Line 1 of Text

Input 1:Hullo

Line 2 of Text Input: Hullo

标签:python,subprocess,stdout

来源: https://codeday.me/bug/20190626/1291272.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值