【发布时间】:2025-08-13 13:55:02
【问题描述】:
我做了一个远程控制客户端,可以接收来自服务器的命令。接收到的命令将在 shell 中作为正常的 cmd 命令执行。但是我怎样才能在后台执行这些命令,这样用户就不会看到任何输入或输出。
例如,当我这样做时,用户会看到发生了什么:
import os
os.system(command_from_server)
【问题讨论】:
标签: python sockets cmd background
我做了一个远程控制客户端,可以接收来自服务器的命令。接收到的命令将在 shell 中作为正常的 cmd 命令执行。但是我怎样才能在后台执行这些命令,这样用户就不会看到任何输入或输出。
例如,当我这样做时,用户会看到发生了什么:
import os
os.system(command_from_server)
【问题讨论】:
标签: python sockets cmd background
您可以使用子进程 Popen 来启动一个 cmd 而无需等待结束:
from subprocess import Popen
pid = Popen(["ls", "-l"]).pid
Popen 有很多用于处理 stdout 和 stderr 的配置选项。见官方文档。
【讨论】:
要在后台执行命令,您必须使用子进程模块。
例如:
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。