【问题标题】:Swift run shell command stuck, but success in xcode debugSwift运行shell命令卡住,但在xcode调试中成功
【发布时间】:2021-04-08 12:04:37
【问题描述】:

我用的是 swift run gradlew build,但是卡在 Start Daemom 上。

#!/usr/bin/swift sh

import Foundation


func shell(_ command: String) -> Void {
    let task = Process()
    task.standardOutput = FileHandle.standardOutput
    task.standardError = FileHandle.standardError
    task.standardInput = FileHandle.standardInput

    task.arguments = ["-c", command]
    task.launchPath = "/bin/sh"
    task.currentDirectoryPath = "/Users/MyProjectPath"
    task.launch()
    
    task.waitUntilExit()
    
    
    assert(task.terminationStatus == 0, "\(command)")
}




shell("./gradlew --debug --info :app:assembleRelease")

输出:

08:52:39.590 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTING
08:52:39.591 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Waiting until process started: Gradle build daemon.
08:52:39.601 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTED
08:52:39.602 [INFO] [org.gradle.process.internal.DefaultExecHandle] Successfully started process 'Gradle build daemon'
08:52:39.602 [DEBUG] [org.gradle.launcher.daemon.client.DefaultDaemonStarter] Gradle daemon process is starting. Waiting for the daemon to detach...
08:52:39.602 [DEBUG] [org.gradle.process.internal.ExecHandleRunner] waiting until streams are handled...
08:52:39.604 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] Starting consuming the daemon process output.

> Starting Daemon 

它启动成功守护进程并等待守护进程输出,由于某种原因没有得到守护进程的输出。

【问题讨论】:

  • 这是一个 Swift 脚本吗?因为如果是这种情况,那么脚本首先完成的异步就存在问题。您需要在末尾添加一个“无限循环”。
  • task.waitUntilExit() 将等待退出
  • 问题是脚本会提前结束。我知道,我玩过 Swift Script。
  • 将其转换为 Swift 脚本使用 github.com/mxcl/swift-sh。出于某种原因,在 swift 脚本中,gradle 是等待启动一个恶魔。
  • 如果你测试 curl stackoverflow.com vs ls 命令,它有效吗?

标签: swift shell gradlew


【解决方案1】:

根据苹果文档task.launchPathtask.launch() 是“已弃用”,不建议再使用。请改用task.executableURLtry task.run()

【讨论】:

  • "'executableURL' 仅在 macOS 10.13 或更高版本中可用"。我怀疑它是否能解决问题,即使解决了,在 macOS 10.13 之前应该有解决方案。
猜你喜欢
  • 2016-07-02
  • 2023-03-03
  • 2015-10-05
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 2014-10-23
相关资源
最近更新 更多