3

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

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

有人告诉我,运行屏幕需要终端,因此我不能简单地通过调用来执行它。你能告诉我一些代码来做到这一点吗?

4

1 回答 1

6

尝试

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

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

subprocess这是文档中的相关引用:

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

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

因此,默认情况下,参数完全按照您提供的方式使用;它不会尝试将字符串解析为多个参数。如果您设置shelltrue,您可以尝试以下操作:

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

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

于 2012-05-30T14:13:15.150 回答