2016-04-14 63 views
0

Tamam, yani. Ben sadece bir df -h çıktı alır ve ekranda gösterir çok basit bir Python komut dosyası yazıyorum. Diğer bazı işlevselliği uygulayacağım ama bu kısım beni güldürüyor.Python altprocess.Popen stdout boşluk ekler ve terim

Kodumun doğru olduğundan eminim, belki de çıktı çok hızlı gidip gitmediğini görmek için time.sleep() ifadelerini ekledim. Ancak, strut ile yinelediğimde, rstrip() ile bile, terminal çıkışı her yeni bir satır oluşturulduğunda garip bir şekilde yerleştirilir ve terminali bozar.

Anythoughts? İşte

benim kod: Burada

#!/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) 

çıktı üretmesi var

SAS Grid NP01 is at 33% 
        SAS Grid NP02 is at 36% 
              SAS Grid P01 is at 3% 
                    SAS Grid P02 is at 23% 
                          SAS Grid P03 is at 41% 
                               SAS Grid P04 is at 24% 
                                     [<service account>@werindgatep01 ~]$ 
                                           [<service account>@werindgatep01 ~]$ 

Ne bu noktada yapmanız gereken CTRL-C ve CTRL-D ise o hizmet hesabı çıkmama düşene kadar ve standart kullanıcı hesabım. Oradan su alabilirim - hizmet hesabı

Kayboldum. .

+1

Bir sonraki sorunuzu sormadan önce, lütfen [ask] ve daha spesifik olarak [mcve] okuyun. Örnek programınızın boyutunu azaltmak ve yabancı unsurlardan kurtulmak, aldığınız cevapların kalitesini artıracaktır. –

+0

Hangi İşletim Sistemini kullanıyorsunuz? Linux ise, hangi dağıtım ve sürüm? –

+0

'print' ifadesi, yazdırdığı noktalar arasında boşluklar ekler. Virgülle ayrılmış listede her zaman için bir boşluk eklersiniz. Bunun daha iyi kontrolü için işlev formunu kullanın ya da 'sys.stdout.write()' yöntemini kullanın. – Keith

cevap

0

.findall() Regex'indeki nokta bir sekme karakteri almayı düşünüyorum. Kontrol etmeyi ve kaldırmayı dene ...

0

-tssh seçeneğine geçin, terminalinizi ham moda zorlar. Ham mod, satır sonundaki örtülü satırbaşı geri dönüşünü bozar ve metin girişinizi dağıtır. the man page itibaren

: "[-t] çok yararlı olabilir uzak makineden üzerinde keyfi ekran tabanlı programları çalıştırmak için kullanılabilir, mesela menü hizmetlerini uygularken"

sen 'değiller yana Bir görsel düzenleyici veya diğer ekran tabanlı bir program çalıştırıyorsanız, -t'u kaybetmenizi öneririz.

+0

Bunun doğru olduğunu düşünmüyorum. '-t 'anahtarı, bir komut verildiğinde borulara geçmek yerine basitçe açılmaya ve bir pıhtı kullanmaya zorlar. App modu ayarlar. – Keith

+0

İşte. . .şaşırtıcı. Yalan söylemeyeceğim, bunun işe yarayacağını düşünmedim ama sadece bir şans verdim ve öyle görünüyor. Bu senaryoyu geliştirmeye devam edeceğim ve eğer çıkmazsa, bıraktığım küçük saçları alan bir gizemi çözeceksin! –

0

Benzer bir sorunla karşılaştım, ancak SSH komutuna "-T" seçeneğini ekleyerek düzeltildi.

-T Sahte ayırmayı devre dışı bırakın.