【发布时间】:2012-06-04 18:50:46
【问题描述】:
我尝试通过子进程调用使用 gnu 屏幕执行服务器守护程序,但它甚至没有启动
subprocess.call(["screen", "-dmS test ./server"])
我被告知运行屏幕需要终端,因此我不能简单地通过调用来执行它。你能告诉我一些代码来做到这一点吗?
【问题讨论】:
标签: python terminal subprocess gnu-screen
我尝试通过子进程调用使用 gnu 屏幕执行服务器守护程序,但它甚至没有启动
subprocess.call(["screen", "-dmS test ./server"])
我被告知运行屏幕需要终端,因此我不能简单地通过调用来执行它。你能告诉我一些代码来做到这一点吗?
【问题讨论】:
标签: python terminal subprocess gnu-screen
试试
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)
字符串会像命令行一样被解析。
【讨论】: