我试图将命令的输出分配给变量,而不会让命令认为它正在被管道传输.这样做的原因是,如果正在通过管道传输,有问题的命令会将未格式化的文本作为输出,但如果从终端运行,则会给出颜色格式化的文本.我需要得到这种颜色格式的文本.@H_404_2@
到目前为止,我已经尝试了一些事情.我这样试过Popen:@H_404_2@
@H_404_2@
output = subprocess.Popen(command,stdout=subprocess.PIPE)
output = output.communicate()[0]
output = output.decode()
print(output)
这将让我打印输出,但它给我输出管道命令时得到的无格式输出.这是有道理的,因为我在Python代码中管它.但我很好奇是否有办法将此命令的输出直接分配给变量,而没有运行自身管道版本的命令.@H_404_2@
我还尝试了以下依赖于check_output的版本:@H_404_2@
@H_404_2@
output = subprocess.check_output(command)
output = output.decode()
print(output)
最佳答案
使用pexpect:@H_404_2@
原文链接:https://www.f2er.com/linux/440636.html2.py:@H_404_2@
@H_404_2@
import sys
if sys.stdout.isatty():
print('hello')
else:
print('goodbye')
子:@H_404_2@
@H_404_2@
import subprocess
p = subprocess.Popen(
['python3.4','2.py'],stdout=subprocess.PIPE
)
print(p.stdout.read())
--output:--
goodbye
Pexpect的:@H_404_2@
@H_404_2@
import pexpect
child = 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:@H_404_2@
@H_404_2@
import subprocess
p = subprocess.Popen(
['grep','--colour=auto','hello','data.txt'],stdout=subprocess.PIPE
)
print(p.stdout.read())
import pexpect
child = 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'