| | |
How to use 'top' using Python
![]() |
Hai Friends
This is my first post to this forum. I am new to Python but I find its quite interesting. I have a problem with the folowing code...
##########################
import telnetlib
import sys
HOST = "192.168.10.5"
USER = "somename"
PASSWORD = "somepassword"
telnet = telnetlib.Telnet(HOST)
telnet.read_until("login: ")
telnet.write(USER + "\n")
telnet.read_until("Password: ")
telnet.write(PASSWORD + "\n")
telnet.write("top -p 1 -n 1\n")
telnet.write("exit\n")
some_value = telnet.read_all()
print some_value
#############################
The problem is that, when I print 'some_value' I get
" top: Unknown terminal "network" in $TERM ". But when I use other commands like 'ls -l' or 'df -h' it works fine & gives me the o/p of the commands. I tried by redirecting the o/p to a file like "top -p 1 -n 1 >> test\n" & then reading the contents of the file, but still it doent work. The file created thru Python was empty. When I directly work on Linux, the command works fine. Can anybody tell what the problem is...
This is my first post to this forum. I am new to Python but I find its quite interesting. I have a problem with the folowing code...
##########################
import telnetlib
import sys
HOST = "192.168.10.5"
USER = "somename"
PASSWORD = "somepassword"
telnet = telnetlib.Telnet(HOST)
telnet.read_until("login: ")
telnet.write(USER + "\n")
telnet.read_until("Password: ")
telnet.write(PASSWORD + "\n")
telnet.write("top -p 1 -n 1\n")
telnet.write("exit\n")
some_value = telnet.read_all()
print some_value
#############################
The problem is that, when I print 'some_value' I get
" top: Unknown terminal "network" in $TERM ". But when I use other commands like 'ls -l' or 'df -h' it works fine & gives me the o/p of the commands. I tried by redirecting the o/p to a file like "top -p 1 -n 1 >> test\n" & then reading the contents of the file, but still it doent work. The file created thru Python was empty. When I directly work on Linux, the command works fine. Can anybody tell what the problem is...
Hi xav.vijay,
I'm not sure, and I can't check right now because I'm at work and using my XP box, but:
Isn't the difference between top and df/ls that programs like df/ls write to STDOUT once and then terminate, while top keeps writing to the terminal window, dynamically updating the information you see? Maybe top relies upon a C library that needs specific information about the terminal it's writing to, and because we're working in Python that information has been lost? Check your TERM environment variable. Is its value really "network"?
I will try to help you more later on today.
I'm not sure, and I can't check right now because I'm at work and using my XP box, but:
Isn't the difference between top and df/ls that programs like df/ls write to STDOUT once and then terminate, while top keeps writing to the terminal window, dynamically updating the information you see? Maybe top relies upon a C library that needs specific information about the terminal it's writing to, and because we're working in Python that information has been lost? Check your TERM environment variable. Is its value really "network"?
I will try to help you more later on today.
Vi veri veniversum vivus vici
Hai G-Do
Thanks for ur reply. U r exactly right about the 'top' command. It doesnt stop until we type 'q' to stop it. I had this problem, so I gave the command as 'top -p 1 -n 1'. Here the command eliminates all PID's & refreshes only once and comes back to the prompt... So I redirected to the o/p to a file named 'test'. When I do this in Linux, the file 'test' has the exact o/p... But when I do it with Python this is what I get... Here is the full error message I get
top -p 1 -n 6 >> test
cat test
exit
Last login: Mon Aug 15 16:57:18 from 10.128.17.34
unknown terminal "network"
unknown terminal "network"
bash: /bin/chmod: Permission denied
[scb@inmaarfesweb2 scb]$ top -p 1 -n 6 >> test
top: Unknown terminal "network" in $TERM
[scb@inmaarfesweb2 scb]$ cat test
[scb@inmaarfesweb2 scb]$ exit
logout
'network': unknown terminal type.
Now after executing the program when I go into Linux & open the file 'test', its empty... I dont know why??
Now I am having a real bad time here... Even the programs which were working for me regularly till yesterday aren't working now...I get the following error message...
Traceback (most recent call last):
File "F:\xav\VM_Calc.py", line 9, in ?
xlApp.Workbooks.open("F:/xav/cpu&virtual.xls")
File "<COMObject <unknown>>", line 2, in open
com_error: (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel', "'cpu&virtual.xls' could not be found. Check the spelling of the file name, and verify that the file location is correct.\n\nIf you are trying to open the file from your list of most recently used files on the File menu, make sure that the file has not been renamed, moved, or deleted.", 'D:\\Program Files\\Microsoft Office\\Office\\1033\\xlmain9.chm', 0, -2146827284), None)
I checked out the path & filename ...But still it is not working... In fact they were working fine for me till yesterday... Is there anything I should do???
Thanks for ur reply. U r exactly right about the 'top' command. It doesnt stop until we type 'q' to stop it. I had this problem, so I gave the command as 'top -p 1 -n 1'. Here the command eliminates all PID's & refreshes only once and comes back to the prompt... So I redirected to the o/p to a file named 'test'. When I do this in Linux, the file 'test' has the exact o/p... But when I do it with Python this is what I get... Here is the full error message I get
top -p 1 -n 6 >> test
cat test
exit
Last login: Mon Aug 15 16:57:18 from 10.128.17.34
unknown terminal "network"
unknown terminal "network"
bash: /bin/chmod: Permission denied
[scb@inmaarfesweb2 scb]$ top -p 1 -n 6 >> test
top: Unknown terminal "network" in $TERM
[scb@inmaarfesweb2 scb]$ cat test
[scb@inmaarfesweb2 scb]$ exit
logout
'network': unknown terminal type.
Now after executing the program when I go into Linux & open the file 'test', its empty... I dont know why??
Now I am having a real bad time here... Even the programs which were working for me regularly till yesterday aren't working now...I get the following error message...
Traceback (most recent call last):
File "F:\xav\VM_Calc.py", line 9, in ?
xlApp.Workbooks.open("F:/xav/cpu&virtual.xls")
File "<COMObject <unknown>>", line 2, in open
com_error: (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel', "'cpu&virtual.xls' could not be found. Check the spelling of the file name, and verify that the file location is correct.\n\nIf you are trying to open the file from your list of most recently used files on the File menu, make sure that the file has not been renamed, moved, or deleted.", 'D:\\Program Files\\Microsoft Office\\Office\\1033\\xlmain9.chm', 0, -2146827284), None)
I checked out the path & filename ...But still it is not working... In fact they were working fine for me till yesterday... Is there anything I should do???
Hi, xav.vijay,
I couldn't get your original code to work, and I'm hesitant to play with it, seeing as how it's telnet, and telnet is unsecured.
I am able to do this:
This prints the top output to screen. Perhaps you could collect the output this way, then send it to telnet.write()?
Also, what is the value of $TERM in your shell?
I couldn't get your original code to work, and I'm hesitant to play with it, seeing as how it's telnet, and telnet is unsecured.
I am able to do this:
Python Syntax (Toggle Plain Text)
import sys, os f = sys.popen("top -p 1 -n 1", "r") text = f.read() print text
Also, what is the value of $TERM in your shell?
Vi veri veniversum vivus vici
Hi again,
You also might want to consider using the -b, or batch option for top:
You also might want to consider using the -b, or batch option for top:
b Batch mode. Useful for sending output from top to other programs or to a file. In this mode, top will not accept command line input. It runs until it produces the number of iterations requested with the n option or until killed. Output is plain text suitable for display on a dumb terminal.Ripped from here.
Vi veri veniversum vivus vici
•
•
Join Date: May 2005
Posts: 215
Reputation:
Solved Threads: 16
this is not probably helpful. but for getting ouput. I like to use the commands.getoutput function. After you get the output, you could write it to a file
Python Syntax (Toggle Plain Text)
>>> import commands >>> output = commands.getoutput('top -p 1 -n 1') >>> print output top - 12:15:11 up 2:00, 2 users, load average: 0.18, 0.25, 0.21 Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie Cpu(s): 12.5% us, 2.2% sy, 5.5% ni, 78.8% id, 0.7% wa, 0.3% hi, 0.0% si Mem: 515720k total, 287572k used, 228148k free, 7352k buffers Swap: 506036k total, 0k used, 506036k free, 174364k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 16 0 1388 508 1236 S 0.0 0.1 0:00.58 init
In a perfect world exceptions would not be needed.
Hai friends
Sorry for the late reply, But thanks for ur suggestions... and really a big thanks to u G-do... the '-b' option worked well for me...
But I had problems with the codes u gave me... as for the one given by G-do, I got the following error message...in Windows
Traceback (most recent call last):
File "F:\xav\space1.py", line 53, in ?
f = sys.popen("top -p 1 -n 1", "r")
AttributeError: 'module' object has no attribute 'popen'
and the following error message in Linux...
Traceback (innermost last):
File "<stdin>", line 1, in ?
AttributeError: popen
I dont know what I should do to add the 'popen' module ...
But Shanenin's code worked really well in linux...But in windows it said
>>> import commands
>>> output = commands.getoutput('dir')
>>> print output
'{' is not recognized as an internal or external command,
operable program or batch file.
>>>
I dont know why it took '{' for '('....
Well G-do & Shanenin I would like ask u something... wont ur codes pick the information of the computer's which
python is currently running?? How do we access them for a remote server???
And G-do... how do I find the value of $TERM, I think I got 'network' from the error messages...
Sorry for the late reply, But thanks for ur suggestions... and really a big thanks to u G-do... the '-b' option worked well for me...
But I had problems with the codes u gave me... as for the one given by G-do, I got the following error message...in Windows
Traceback (most recent call last):
File "F:\xav\space1.py", line 53, in ?
f = sys.popen("top -p 1 -n 1", "r")
AttributeError: 'module' object has no attribute 'popen'
and the following error message in Linux...
Traceback (innermost last):
File "<stdin>", line 1, in ?
AttributeError: popen
I dont know what I should do to add the 'popen' module ...
But Shanenin's code worked really well in linux...But in windows it said
>>> import commands
>>> output = commands.getoutput('dir')
>>> print output
'{' is not recognized as an internal or external command,
operable program or batch file.
>>>
I dont know why it took '{' for '('....
Well G-do & Shanenin I would like ask u something... wont ur codes pick the information of the computer's which
python is currently running?? How do we access them for a remote server???
And G-do... how do I find the value of $TERM, I think I got 'network' from the error messages...
•
•
Join Date: May 2005
Posts: 215
Reputation:
Solved Threads: 16
to access your info for a remote computer, you could log in using ssh. The remote computer would also need python. I am not sure if this is what you are asking.
Python Syntax (Toggle Plain Text)
shane@mainbox shane $ ssh 192.168.1.104 Password: Last login: Sun Jul 31 19:58:05 2005 from 192.168.1.105 shane@freevo shane $ python Python 2.3.3 (#1, Oct 3 2004, 15:43:03) [GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import commands >>> uname_output = commands.getoutput('uname -a') >>> print uname_output Linux freevo 2.6.8-gentoo-r3 #3 Mon May 16 22:25:23 CDT 2005 i686 Intel(R) Celeron(R) CPU 2.00GHz GenuineIntel GNU/Linux
In a perfect world exceptions would not be needed.
Hi xav.vijay,
First things first: I made a mistake. Vegaseat is correct, the popen function is in the os module, not the sys module. The corrected code looks like:
To get the value of any environment variable, such as PATH or TERM, you type:
in Linux (bash shell), or:
in Windows. Of course, I think TERM is usually a Linux-specific environment variable, so if you try that in Windows, you're not going to get anything useful. I want to know the value of TERM both on your local machine and on the remote server, because someone (the telnet daemon on the remote server, I suspect) is telling top that the terminal type is "network," and while this is accurate, we may be able to trick it into thinking it is "xterm" which should make it work without any negative consequences, provided you are using the -b option.
Now, for the meat. Let me see if I understand: you are trying to write a telnet program that logs into a remote server, executes `top` on that server, and prints the output on the local machine, correct? So you need two things: a way to execute top remotely, and a way to collect the output. Have you tried using the -b option with your original code? In other words, I need to know if the following works for you:
If not, try uncommenting the line which causes telnet to exit, then run it again. Does this method give any output at all?
I would like to test the code myself, but telnet is not a secure remote-login protocol, and I don't have any telnet-able accounts on any servers I know of.
EDIT: Also, you might consider using getpass to get your password, rather than hard-coding it into the file:
Try it!
First things first: I made a mistake. Vegaseat is correct, the popen function is in the os module, not the sys module. The corrected code looks like:
Python Syntax (Toggle Plain Text)
import sys, os f = os.popen("top -p 1 -n 1", "r") text = f.read() print text
Python Syntax (Toggle Plain Text)
echo $VARIABLE_NAME
Python Syntax (Toggle Plain Text)
echo %VARIABLE_NAME%
Now, for the meat. Let me see if I understand: you are trying to write a telnet program that logs into a remote server, executes `top` on that server, and prints the output on the local machine, correct? So you need two things: a way to execute top remotely, and a way to collect the output. Have you tried using the -b option with your original code? In other words, I need to know if the following works for you:
Python Syntax (Toggle Plain Text)
import sys, telnetlib # -- Hard-code our host IP, our username, and our password HOST = "192.168.10.5" USER = "somename" PASSWORD = "somepassword" # -- Instantiate our telnet client and connect to the remote server telnet = telnetlib.Telnet(HOST) # -- Tell the telnet daemon our username and password telnet.read_until("login: ") telnet.write(USER + "\n") telnet.read_until("Password: ") telnet.write(PASSWORD + "\n") # -- Print the `top -p 1 -n 1 -b` output telnet.write("top -p 1 -n 1 -b\n") # Unsure if we should exit before read_all(), maybe uncomment this? # telnet.write("exit\n") # -- Read all the text from the telnet client, print it print telnet.read_all()
I would like to test the code myself, but telnet is not a secure remote-login protocol, and I don't have any telnet-able accounts on any servers I know of.
EDIT: Also, you might consider using getpass to get your password, rather than hard-coding it into the file:
Python Syntax (Toggle Plain Text)
import getpass password = getpass.getpass() print password
Vi veri veniversum vivus vici
![]() |
Similar Threads
- Speeding up Python (Python)
- Script wont run on different computer (Python)
- Keeping Python window "on top" of others (Python)
- what is python (Python)
Other Threads in the Python Forum
- Previous Thread: need help comparing bits
- Next Thread: how to do two things at once?
| Thread Tools | Search this Thread |
abrupt alarm ansi anti approximation assignment avogadro backend beginner binary bluetooth calculator character cmd code customdialog cx-freeze data decimals dictionaries dictionary directory dynamic error examples exe file float format function gnu graphics gui halp heads homework http ideas import input java launcher leftmouse line linux list lists loop module mouse number numbers output parsing path pointer port prime programming progressbar projects push py2exe pygame pyglet pyqt python random recursion schedule screensaverloopinactive script scrolledtext sqlite statistics string strings sudokusolver sum table terminal text thread threading time tlapse tricks tuple tutorial twoup ubuntu unicode urllib urllib2 variable ventrilo wikipedia write wxpython xlib






