从python启动gnu屏幕?

时间:2012-05-30 14:05:23

标签: python terminal subprocess gnu-screen

我尝试从子进程调用中执行带有gnu屏幕的服务器守护程序,但它甚至没有启动

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

我被告知运行屏幕需要终端,因此我不能简单地通过调用执行它。你能告诉我一些代码吗?

1 个答案:

答案 0 :(得分:6)

尝试

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

您需要将参数字符串分解为单独的参数,每个字符串一个。

以下是subprocess文档的相关引用:

  

在UNIX上,shell = False(默认值):在本例中为Popen类    使用os.execvp()来执行子程序。 args应该正常    是一个序列。字符串将被视为带有字符串的序列    作为唯一的项目(要执行的程序)。

     

在UNIX上,shell = True:如果args是一个字符串,则指定    命令字符串通过shell执行。如果args是一个序列,    第一项指定命令字符串和任何其他项    将被视为额外的shell参数。

因此,默认情况下,参数的使用方式与您给出的完全相同;它不会尝试将字符串解析为多个参数。如果您将shell设置为true,则可以尝试以下操作:

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

,字符串的解析方式与命令行完全相同。