无法在 Mac 上创建带有子进程的新控制台
Posted
技术标签:
【中文标题】无法在 Mac 上创建带有子进程的新控制台【英文标题】:Not able to create a new console with subprocess on a Mac 【发布时间】:2020-01-26 07:36:54 【问题描述】:我开发了一个 python 脚本,可以在不同的控制台中启动几个 Node.js 应用程序。它可以在 Windows(python 版本 3.7.3)上运行,但不能在 Mac(3.7.4_1)上运行。
我一直在滚动 python 文档,但没有看到任何问题,而且我在堆栈溢出中发现的几篇帖子都没有解决我的问题。
这是错误:
subprocess.Popen(['node', 'index.js'],
creationflags=subprocess.CREATE_NEW_CONSOLE, shell=False)
AttributeError: 模块 'subprocess' 没有属性 'CREATE_NEW_CONSOLE'
代码如下:
def __runProject(self, project):
print(f'Starting project \'project.projectName\'...')
subprocess.Popen(['node', 'index.js'], creationflags=subprocess.CREATE_NEW_CONSOLE, shell=False)
os.chdir(self.__currentWorkingDirectory)
提前谢谢你!
【问题讨论】:
您是否看到说明该变量仅适用于 Windows 的文档? ***.com/q/29633719/2308683 谢谢。我读过但错过了这部分。不过,鉴于我想打开多个控制台以同时启动多个进程,你会建议怎么做?谢谢 这应该适用于 macOS:subprocess.Popen(['/usr/bin/open', '-n', '-a', 'Terminal', '/usr/local/bin/ node', 'index.js'], shell=False) 【参考方案1】:确实,macOS 终端在打开新命令后运行命令时有所不同。 诀窍是使用“打开”命令。 该参数实际上应该是要运行的命令文件。 因此,对于使用参数 index.js 运行节点,以下代码将创建一个命令文件 (start_node.command),该文件将使用来自新终端的参数启动节点:
with open("start_node.command", "w") as f:
f.write("#!/bin/sh\nnode index.js\n")
os.chmod('myfile', stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IWGRP | stat.S_IROTH)
subprocess.Popen(['/usr/bin/open', '-n', '-a', 'Terminal', 'start_node.command'], shell=False)
【讨论】:
终端的参数必须是绝对或相对路径。没有对参数进行路径搜索。 所提供的答案被标记为低质量帖子以供审核。以下是How do I write a good answer? 的一些指南。这个提供的答案可能是正确的,但它可以从解释中受益。仅代码答案不被视为“好”答案。来自review。 感谢您的评论。下次我的帖子会提供更多信息。 答案可以是edited来解释怎么回事。 再次更新帖子。终端的参数实际上应该是一个命令文件,它使用参数启动节点。以上是关于无法在 Mac 上创建带有子进程的新控制台的主要内容,如果未能解决你的问题,请参考以下文章