【问题标题】:Launch gnu screen from python?从python启动gnu屏幕?
【发布时间】:2012-06-04 18:50:46
【问题描述】:

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

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

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

【问题讨论】:

    标签: python terminal subprocess gnu-screen


    【解决方案1】:

    试试

    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)
    

    字符串会像命令行一样被解析。

    【讨论】:

    • 谢谢!那行得通,但奇怪的是我需要以这种方式破坏所有参数。以为我可以把所有的论点放在一起
    • 答案已更新为(尝试)解释为什么需要拆分 args。
    猜你喜欢
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多