【问题标题】:How to run shell-commands in Python? [duplicate]如何在 Python 中运行 shell 命令? [复制]
【发布时间】:2025-08-13 13:55:02
【问题描述】:

我做了一个远程控制客户端,可以接收来自服务器的命令。接收到的命令将在 shell 中作为正常的 cmd 命令执行。但是我怎样才能在后台执行这些命令,这样用户就不会看到任何输入或输出。


例如,当我这样做时,用户会看到发生了什么:

import os
os.system(command_from_server)

【问题讨论】:

    标签: python sockets cmd background


    【解决方案1】:

    您可以使用子进程 Popen 来启动一个 cmd 而无需等待结束:

    from subprocess import Popen
    pid = Popen(["ls", "-l"]).pid
    

    Popen 有很多用于处理 stdout 和 stderr 的配置选项。见官方文档。

    【讨论】:

    • 我还不知道子进程 Popen,但我会尝试一下。谢谢
    【解决方案2】:

    要在后台执行命令,您必须使用子进程模块。
    例如:

    import subprocess
    subprocess.Popen("command", shell=True)
    

    如果你想执行带有多个参数的命令,例如:ls -a,代码有点不同:

    import subprocess
    subprocess.Popen("ls -a", shell=True)
    

    要更改目录,您可以使用 os 模块:

    import os
    os.chdir(path)
    

    但是,正如下面 cmets 中的 Tripleee 所述,您也可以将 cwd 参数传递给 subprocess.Popen-Method。

    【讨论】:

    • 那不是真的; subprocess 接受关键字参数cwd=,您可以在其中指定在哪个目录中运行子进程。
    • 另外,shell=True 在第二个例子中是错误的;您要么ls -l作为单个字符串传递,或者(更好。在这里)删除shell=True