views:

80

answers:

2

Hello, I am very new to programming and am trying to run a python code to see if the screen program is running and if it is then to not run the rest of the code. This is what I have and it's not working.

#!/usr/bin/python

import os
var1 = os.system ('screen -r > /root/screenlog/screen.log')
fd = open("/root/screenlog/screen.log")
content = fd.readline()

while content:
 if content == "There is no screen to be resumed.":
  os.system ('/etc/init.d/tunnel.sh')
  print "The tunnel is now active."
 else:
  print "The tunnel is running."
fd.close()

I know there are probably several things here that don't need to be and quite a few that I'm missing. I will be running this program in cron. Thanks for any help.

A: 

Maybe the error message that you redirect on the first os.system call is written on the standard error instead of the standard output. You should try replacing this line with:

var1 = os.system ('screen -r 2> /root/screenlog/screen.log')

Note the 2> to redirect standard error to your file.

Didier Trosset
It is writing it to the file. When I try to redirect it, it writes no info to the file.
spxxn
+2  A: 
from subprocess import Popen, PIPE

def screen_is_running():
    out = Popen("screen -list",shell=True,stdout=PIPE).communicate()[0]
    return not out.startswith("This room is empty")
jetxee
Tried this as well and had no luck.
spxxn
Could you post your error message? What version of Python you are using? Is it possible that screen is not installed where you run it?
jetxee
@jetxee: Don't forget, the output of `screen -list` depends on the value of the NETHACK option. :) @spxxn: what is the output of `screen -list`
MikeyB