Flint
Flint

Reputation: 456

Launch gnu screen from python?

I tried executing a server daemon with gnu screen from subprocess call but it didn't even start

subprocess.call(["screen", "-dmS test ./server"])

I was told that running screen requires terminal, hence the reason why I can't simply execute it with call. Can you show me some piece of codes to do this?

Upvotes: 3

Views: 3720

Answers (1)

chepner
chepner

Reputation: 530970

Try

subprocess.call( ["screen", "-d", "-m", "-S", "test", "./server"] )

You need to break the argument string into separate arguments, one per string.

Here's the relevant quote from the subprocess docs:

On UNIX, with shell=False (default): In this case, the Popen class uses os.execvp() to execute the child program. args should normally be a sequence. A string will be treated as a sequence with the string as the only item (the program to execute).

On UNIX, with shell=True: If args is a string, it specifies the command string to execute through the shell. If args is a sequence, the first item specifies the command string, and any additional items will be treated as additional shell arguments.

So by default, the arguments are used exactly as you give them; it doesn't try to parse a string into multiple arguments. If you set shell to true, you could try the following:

subprocess.call("screen -dmS test ./server", shell=True)

and the string would be parsed exactly like a command line.

Upvotes: 8

Related Questions