使用gnu-screen和call()的意外结果

时间:2012-04-25 19:49:31

标签: python subprocess gnu-screen

作为更大应用程序的一部分,我正在尝试使用subprocess.call()创建一个使用python的“屏幕”。

使用参数-d -m创建屏幕应该在后台创建它而不是切换到它。如果我在命令行上运行screen -d -m -S test,它会按预期工作   

但是,如果我尝试以下python代码:

cmd=["screen", "-d", "-m", "-S", "test"]
call(cmd,shell=True)

它跳转到创建的屏幕。

调用如何传递这些参数或运行命令有什么不同吗?

2 个答案:

答案 0 :(得分:0)

试试这个

cmd=["screen", "-d", "-m", "-S", "test", "bash"]
call(cmd)

答案 1 :(得分:0)

适合我(没有shell=True)。

即,使用以下脚本:

#!/usr/bin/env python
from subprocess import *
cmd=['screen', '-d', '-m', '-S', 'test']
call(cmd)

调用正确启动后台屏幕进程:

$ screen -ls
No Sockets found in /var/run/screen/S-cduffy.

$ ./screen-startup-test 
$ screen -ls
There is a screen on:
        12161.test      (04/25/2012 03:47:32 PM)        (Detached)
1 Socket in /var/run/screen/S-cduffy.