从python启动gnu屏幕?

Fli*_*int 3 python terminal subprocess gnu-screen

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

subprocess.call(["screen", "-dmS test ./server"])
Run Code Online (Sandbox Code Playgroud)

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

che*_*ner 6

尝试

subprocess.call( ["screen", "-d", "-m", "-S", "test", "./server"] )
Run Code Online (Sandbox Code Playgroud)

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

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

在UNIX上,shell = False(默认值):在这种情况下,Popen类使用os.execvp()来执行子程序.args通常应该是一个序列.字符串将被视为一个序列,其中字符串作为唯一项(要执行的程序).

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

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

subprocess.call("screen -dmS test ./server", shell=True)
Run Code Online (Sandbox Code Playgroud)

并且字符串将像命令行一样被解析.