Python子流程.Popenstdout添加空格并破坏术语

2024-04-25 19:45:51 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,所以。我正在编写一个非常基本的Python脚本,它只接受df-h的输出并将其显示在屏幕上。我将实现一些其他功能,但这一部分让我左右为难。在

我很确定我的代码是正确的,我甚至把时间。睡觉()语句,以查看输出是否执行得太快。但是,当我迭代stdout时,即使使用rstrip(),每次创建新行时,终端输出的间隔都很奇怪,这会损坏终端。在

有什么想法吗?在

我的代码是:

    #!/usr/bin/python

import sys
import os
import re
import subprocess
import time

np1=subprocess.Popen('ssh -qt <redacted>/usr/bin/sudo df -h /opt/saswork', shell=True, stdout=subprocess.PIPE)
np2=subprocess.Popen('ssh -qt <redacted>/usr/bin/sudo df -h /opt/saswork', shell=True, stdout=subprocess.PIPE)
p1=subprocess.Popen('ssh -qt <redacted>/usr/bin/sudo df -h /opt/saswork', shell=True, stdout=subprocess.PIPE)
p2=subprocess.Popen('ssh -qt <redacted>/usr/bin/sudo df -h /opt/saswork', shell=True, stdout=subprocess.PIPE)
p3=subprocess.Popen('ssh -qt <redacted>/usr/bin/sudo df -h /opt/saswork', shell=True, stdout=subprocess.PIPE)
p4=subprocess.Popen('ssh -qt <redacted>/usr/bin/sudo df -h /opt/saswork', shell=True, stdout=subprocess.PIPE)


for x in np1.stdout:
    x=x.rstrip()
    x=re.findall('.\d%', x)
    for y in x:
        print "SAS Grid NP01 is at ", str(y)
time.sleep(1)
for x in np2.stdout:
    x=x.rstrip()
    x=re.findall('.\d%', x)
    for y in x:
        print "SAS Grid NP02 is at ", str(y)
time.sleep(1)
for x in p1.stdout:
    x=x.rstrip()
    x=re.findall('.\d%', x)
    for y in x:
        print "SAS Grid P01 is at ", str(y)
time.sleep(1)
for x in p2.stdout:
    x=x.rstrip()
    x=re.findall('.\d%', x)
    for y in x:
        print "SAS Grid P02 is at ", str(y)
time.sleep(1)
for x in p3.stdout:
    x=x.rstrip()
    x=re.findall('.\d%', x)
    for y in x:
        print "SAS Grid P03 is at ", str(y)
time.sleep(1)
for x in p4.stdout:
    x=x.rstrip()
    x=re.findall('.\d%', x)
    for y in x:
        print "SAS Grid P04 is at ", str(y)

这是输出

^{pr2}$

此时我要做的是CTRL-C和CTRL-D,直到它将我从服务帐户中取出并返回到我的标准用户帐户。从那里我可以sudo su服务帐户

我迷路了。完全迷路了


Tags: inredfforbintimeusrstdout
3条回答

我也遇到了类似的问题,但是通过在SSH命令中添加“-T”选项来修复它。在

-T禁用伪tty分配。在

切换到-tssh将迫使您的终端进入原始模式。Raw模式会破坏行末的隐式回车符,并扰乱文本输入。在

来自the man page:“[-t]可用于在远程计算机上执行基于屏幕的任意程序,这非常有用,例如在实现菜单服务时。

由于您没有运行可视化编辑器或其他基于屏幕的程序,我建议您丢失-t。在

我认为您的.findall()正则表达式中的点将使用制表符。尝试检查并删除。。。?在

相关问题 更多 >