Python 3.4.3 subprocess.Popen获取命令输出而不管道?

Python 3.4.3 subprocess.Popen获取命令输出而不管道?,第1张

概述我试图将命令的输出分配给变量,而不会让命令认为它正在被管道传输.这样做的原因是,如果正在通过管道传输,有问题的命令会将未格式化的文本作为输出,但如果从终端运行,则会给出颜色格式化的文本.我需要得到这种颜色格式的文本.到目前为止,我已经尝试了一些事情.我这样试过Popen:output = subprocess.Popen(command, stdout=su

我试图将命令的输出分配给变量,而不会让命令认为它正在被管道传输.这样做的原因是,如果正在通过管道传输,有问题的命令会将未格式化的文本作为输出,但如果从终端运行,则会给出颜色格式化的文本.我需要得到这种颜色格式的文本.

到目前为止,我已经尝试了一些事情.我这样试过Popen:

output = subprocess.Popen(command,stdout=subprocess.PIPE)output = output.communicate()[0]output = output.decode()print(output)

这将让我打印输出,但它给我输出管道命令时得到的无格式输出.这是有道理的,因为我在Python代码中管它.但我很好奇是否有办法将此命令的输出直接分配给变量,而没有运行自身管道版本的命令.

我还尝试了以下依赖于check_output的版本:

output = subprocess.check_output(command)output = output.decode()print(output)

而且,当命令通过管道输出时,我得到了与命令返回的相同的无格式输出.

有没有办法获得格式化输出,命令通常从终端提供的输出,当它没有被管道?

最佳答案使用pexpect:

2.py:

import sysif sys.stdout.isatty():    print('hello')else:    print('goodbye')

子:

import subprocessp = subprocess.Popen(    ['python3.4','2.py'],stdout=subprocess.PIPE)print(p.stdout.read())--output:--goodbye

Pexpect的:

import pexpectchild = pexpect.spawn('python3.4 2.py')child.expect(pexpect.EOF)print(child.before)  #Print all the output before the expectation.--output:--hello

这里是grep –colour = auto:

import subprocessp = subprocess.Popen(    ['grep','--colour=auto','hello','data.txt'],stdout=subprocess.PIPE)print(p.stdout.read())import pexpectchild = pexpect.spawn('grep --colour=auto hello data.txt')child.expect(pexpect.EOF)print(child.before)--output:--b'hello world\n'b'\x1b[01;31mhello\x1b[00m world\r\n'
总结

以上是内存溢出为你收集整理的Python 3.4.3 subprocess.Popen获取命令输出而不管道?全部内容,希望文章能够帮你解决Python 3.4.3 subprocess.Popen获取命令输出而不管道?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1047495.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存