如何从虚拟Windows的PyCharm向MacBook终端发送命令?
解决方案:从Windows虚拟机向Mac主机终端发送命令
基于你的VMWare Fusion虚拟机场景,以下三种方法可以实现Windows中PyCharm的Python程序向Mac终端发送并执行命令:
方法1:SSH远程执行(推荐,通用稳定)
所需工具/准备
- Mac端:开启远程登录(SSH服务):进入「系统设置→通用→共享」,勾选「远程登录」,记录Mac的本地IP(终端执行
ipconfig getifaddr en0获取)。 - Windows端:安装Python的
paramiko库,执行:pip install paramiko
代码示例(Windows端PyCharm中运行)
import paramiko # Mac主机的SSH信息 mac_ip = "192.168.1.100" # 替换成你的Mac IP mac_username = "your_mac_username" # 替换成你的Mac用户名 mac_password = "your_mac_password" # 替换成你的Mac密码 # 建立SSH连接 ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh_client.connect(mac_ip, username=mac_username, password=mac_password) # 执行Mac终端命令(比如打印Hello World) command = 'echo "Hello World"' stdin, stdout, stderr = ssh_client.exec_command(command) # 可选:获取命令输出 print(stdout.read().decode()) print(stderr.read().decode()) # 关闭连接 ssh_client.close()
注意事项
- 确保Windows虚拟机和Mac在同一网络(VMWare网络模式设为「桥接」或「NAT」均可)。
- 若Mac开启防火墙,需允许SSH端口(默认22)的入站连接。
方法2:共享文件夹+文件监听
所需工具/准备
- VMWare Fusion设置共享文件夹:打开虚拟机「设置→共享」,添加一个共享文件夹,设置为「总是启用」,记录Windows中该文件夹的路径(比如
Z:\mac_shared)。 - Mac端:安装
watchdog库用于监听文件变化,执行:pip install watchdog
步骤
- Mac端监听脚本(后台运行,比如终端执行
python3 mac_watcher.py &):
from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler import subprocess import time # 共享文件夹的Mac本地路径(替换成你的共享文件夹路径) SHARED_FOLDER = "/Users/yourname/mac_shared" COMMAND_FILE = f"{SHARED_FOLDER}/command.txt" class CommandHandler(FileSystemEventHandler): def on_modified(self, event): if event.src_path == COMMAND_FILE: time.sleep(0.1) # 等待文件写入完成 with open(COMMAND_FILE, "r") as f: command = f.read().strip() if command: # 执行命令 result = subprocess.run(command, shell=True, capture_output=True, text=True) print(f"命令输出:\n{result.stdout}") print(f"错误信息:\n{result.stderr}") # 清空命令文件 with open(COMMAND_FILE, "w") as f_clear: f_clear.write("") if __name__ == "__main__": event_handler = CommandHandler() observer = Observer() observer.schedule(event_handler, SHARED_FOLDER, recursive=False) observer.start() try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join()
- Windows端PyCharm代码:
# Windows中共享文件夹的路径 COMMAND_FILE = r"Z:\mac_shared\command.txt" # 写入要执行的命令 command = 'echo "Hello World"' with open(COMMAND_FILE, "w") as f: f.write(command)
方法3:Socket网络通信(无额外依赖)
所需工具/准备
- 无需额外安装库,用Python内置的
socket和subprocess模块即可。 - 确保Windows虚拟机能访问Mac的IP(同方法1的网络设置)。
步骤
- Mac端Socket服务端脚本(终端运行):
import socket import subprocess # 设置监听的IP和端口 HOST = "0.0.0.0" # 监听所有网卡 PORT = 12345 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((HOST, PORT)) s.listen() print(f"Mac服务端已启动,监听端口 {PORT}") while True: conn, addr = s.accept() with conn: print(f"来自 {addr} 的连接") command = conn.recv(1024).decode().strip() if command: # 执行命令 result = subprocess.run(command, shell=True, capture_output=True, text=True) # 可选:把结果返回给Windows客户端 conn.sendall(result.stdout.encode() + b"\n" + result.stderr.encode())
- Windows端PyCharm客户端代码:
import socket # Mac主机的IP和端口 HOST = "192.168.1.100" # 替换成你的Mac IP PORT = 12345 # 要发送的命令 command = 'echo "Hello World"' with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((HOST, PORT)) s.sendall(command.encode()) # 可选:接收Mac端返回的执行结果 data = s.recv(1024) print(f"Mac端执行结果:\n{data.decode()}")
内容的提问来源于stack exchange,提问作者Sinha
相关产品推荐
相关产品推荐

