【问题标题】:Not able to create a new console with subprocess on a Mac无法在 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 的文档? stackoverflow.com/q/29633719/2308683
  • 谢谢。我读过但错过了这部分。不过,鉴于我想打开多个控制台以同时启动多个进程,你会建议怎么做?谢谢
  • 这应该适用于 macOS:subprocess.Popen(['/usr/bin/open', '-n', '-a', 'Terminal', '/usr/local/bin/ node', 'index.js'], shell=False)

标签: python python-3.x macos subprocess


【解决方案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来解释怎么回事。
  • 再次更新帖子。终端的参数实际上应该是一个命令文件,它使用参数启动节点。
猜你喜欢
  • 2015-01-01
  • 1970-01-01
  • 2021-12-15
  • 2016-11-02
  • 2021-05-14
  • 2022-08-24
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
相关资源
最近更新 更多