spxxn
spxxn

Reputation: 11

How can I tell whether screen is running?

I am trying to run a Python program to see if the screen program is running. If it is, then the program should 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.

Upvotes: 0

Views: 424

Answers (2)

sastanin
sastanin

Reputation: 41541

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")

Upvotes: 2

Didier Trosset
Didier Trosset

Reputation: 37467

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.

Upvotes: -1

Related Questions