我尝试从子进程调用中执行带有gnu屏幕的服务器守护程序,但它甚至没有启动
subprocess.call(["screen", "-dmS test ./server"])
我被告知运行屏幕需要终端,因此我不能简单地通过调用执行它。你能告诉我一些代码吗?
答案 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)
,字符串的解析方式与命令行完全相同。