2016-02-03 9 views
5

मेरे नीचे कार्यक्रम में से अलग दिखाता है, उत्पादन test1.txt दायर करने के लिए निर्देशित कर दिये है, लेकिन जब मैं फ़ाइल को खोलने, मैं यहाँ तीन समस्या है:स्टैंडर्ड आउटपुट फ़ाइल पर पुनः निर्देशित वास्तविक

  1. मैं आदेश देखें एलएस की तरह, pwd प्रॉम्प्ट के नीचे हैं (sw0: FID128: root>)।
  2. प्रॉम्प्ट को "sw0: FID128: root>" दिखाने की उम्मीद है, लेकिन यह "sw0: FID128: root"
  3. दिखाता है यदि वास्तविक आउटपुट में 2 टैब हैं, तो फ़ाइल केवल 1 टैब दिखाती है।

मैं मूल रूप से इसे किसी अन्य फ़ाइल से तुलना करना चाहता हूं, इसलिए टैब की संख्या अलग होने पर यह असफल हो जाएगी।

telconn=pexpect.spawn('telnet 10.24.12.109') 
telconn.logfile = sys.stdout 
telconn.expect(":") 
telconn.send("user" + "\r") 
telconn.expect(":") 
telconn.send("pass" + "\r\r\r\r\n\n\n") 
telconn.expect("key to proceed.") 
telconn.send ("\003") 
telconn.expect("root>") 
prev_std= sys.stdout 
sys.stdout=open("test1.txt","w") 

print "Telnet connection is done" 

telconn.sendline('\n'); 
telconn.expect (['>',pexpect.EOF]) 
ls = telconn.before 

telconn.sendline('ls -al'); 
telconn.expect (['>',pexpect.EOF]) 
ls = telconn.before 

telconn.sendline('pwd'); 
telconn.expect (['>',pexpect.EOF]) 
pwd = telconn.before 

telconn.sendline('noscli'); 
telconn.expect (['#',pexpect.EOF]) 
nos = telconn.before 

telconn.sendline('terminal length 0'); 
telconn.expect (['#',pexpect.EOF]) 
term = telconn.before 

telconn.sendline('\n\n'); 

telconn .sendline('exit'); 
telconn.close() 

print ls 
print pwd 
print nos 
print term 

#print "Ended session" 


sys.stdout.close() 
sys.stdout =prev_std 

fo = open("test1.txt", "r+") 
str = fo.read(); 
print "Read String is : ", str 
# Close opend file 
fo.close() 

नमूना उत्पादन इस

Telnet connection is done 
^M 
sw0:FID128:root 
ls -al^M 
total 32^M 
pwddrwx------ 3 root root 4096 Feb 2 11:07 ./^M 
^M 
drwxr-xr-x 28 root root 4096 Feb 3 05:58 ../^M 
-rw-r--r-- 1 root sys 507 Feb 1 06:47 .bash_logout^M 
-rw-r--r-- 1 root sys 27 Feb 1 06:47 .inputrc^M 
-rw-r--r-- 1 root sys 1220 Feb 1 06:47 .profile^M 
-rw-r--r-- 1 root sys 2551 Feb 1 06:47 .rhosts^M 
drwxr-xr-x 2 root sys 4096 Feb 1 09:51 .ssh/^M 
-rw-r--r-- 1 root sys 617 Feb 1 06:47 .toprc^M 
-rw-r--r-- 1 root root 0 Feb 3 06:01 mcast_trc^M 
-rw-r--r-- 1 root root 0 Feb 3 06:01 sysdiag_trc^M 
sw0:FID128:root 
pwd^M 
/root^M 

उत्तर

0

मैं ls की तरह आदेश देखें तरह लग रहा है, लोक निर्माण विभाग (^MCR है) शीघ्र

आपका आउटपुट असंगत नई-पंक्तियों है नीचे हैं। इसका मतलब है कि आपके ensemble आउटपुट के कुछ हिस्सों CR+LF, अन्य - बस LF। यह कहना मुश्किल है कि केवल एक ही आउटपुट से कौन सा है। उन्हें अलग करें और खुद के लिए देखें।

संकेत दिखाने की उम्मीद है "SW0: FID128: जड़>" लेकिन यह "SW0: FID128: रूट" से पता चलता

संभावित कारण:

  1. आप नहीं कर रहे हैं आउटपुट को ईमानदारी से कैप्चर करना। जैसे कुछ भी stderr पर मुद्रित हो जाता है।
    • उपयोग 2>&1 या समकक्ष या अन्यथा दोनों आउटपुट को देखने के किसी भी तरह
  2. जब पुनः निर्देशित, उत्पादन वास्तव में क्या कंसोल पर देखा जाता है से अलग है। कुछ प्रोग्राम इसे अलग करने के लिए isatty() फ़ंक्शन का उपयोग करके ऐसा करते हैं। आमतौर पर तर्क मानव या मशीन पढ़ने के लिए आउटपुट फिट करने के लिए बेहतर है। ऐसे कई कार्यक्रमों ने आउटपुट स्वाद को स्पष्ट रूप से निर्दिष्ट करने के लिए स्विच किया है।
    • आप कहीं ऐसा तो नहीं
telnet साथ

है की जाँच करने के लिए या cat <command_file> | (इनपुट पुनर्निर्देशन के लिए) (उत्पादन पुनर्निर्देशन के लिए) | cat की तरह कुछ का उपयोग कर सकते, यह या तो हो सकता है। > एक कमांड प्रॉम्प्ट है। यह आमतौर पर stderr पर मुद्रित होता है। इसे अभी भी मुद्रित किया जा सकता है या पुनर्निर्देशन के समय बिल्कुल मुद्रित नहीं किया जा सकता है।

यदि वास्तविक आउटपुट में 2 टैब हैं, तो फ़ाइल केवल 1 टैब दिखाती है।

शायद 2 के समान)।हो सकता है कि आउटपुट जो कुछ भी हो, टैब रूपांतरण भी करता है।

+0

मेरे पहले बिंदु के लिए, उदाहरण के लिए ls -al प्रेषण से आउटपुट और आउटपुट कुल 7736 drwx ------ 3 रूट रूट 4096 फरवरी 5 05:19 ./ drwxr-xr-x 28 रूट रूट 4096 5 फरवरी 05:30 ../ -rw-r - r-- 1 रूट sys 507 फरवरी 1 06:47 .bash_logout -rw-r-r-- 1 रूट sys 27 फ़रवरी 1 06:47 .inputrc -rw-r - r-- 1 रूट sys 1220 फरवरी 1 06:47 .profile -rw-r-r-- 1 रूट sys 2551 फ़रवरी 1 06:47 .rhosts drwxr-xr-x 2 रूट sys 4096 अप्रैल 22 2015। एसएसएच/ -आरडब्ल्यू-आर - आर-- 1 रूट sys 617 फरवरी 1 06:47 .toprc – Suma

+0

@ सुमा मैं पहले से ही देख सकता हूं। एकमात्र 'एलएफ' संकेत के बाद है। इसलिए विस्तार से जांचें कि इस बिंदु पर क्या होता है - यह 'एलएफ' कहां से आ रहा है। –

संबंधित मुद्दे