小编Ath*_*lex的帖子

Swift:如何在子进程中读取标准输出而无需等待进程完成

我有一个外部控制台应用程序(在OS X上),它发出一系列从1到100到标准输出的整数,大约每秒一次.

我Swift,我需要使用该数字流来更新进度指示器.

这是我到目前为止的代码:

class MasterViewController: NSViewController {

@IBOutlet weak var progressIndicator: NSProgressIndicator!

override func viewDidLoad() {
    super.viewDidLoad()

    let task = Process()
    task.launchPath = "/bin/sh"
    task.arguments = ["-c", "sleep 1; echo 10 ; sleep 1 ; echo 20 ; sleep 1 ; echo 30 ; sleep 1 ; echo 40; sleep 1; echo 50; sleep 1; echo 60; sleep 1"]  

    let pipe = Pipe()
    task.standardOutput = pipe

    task.launch()

    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    if let string = String(data: data, encoding: String.Encoding.utf8) …
Run Code Online (Sandbox Code Playgroud)

cocoa swift

7
推荐指数
1
解决办法
4359
查看次数

Swift 包管理器支持正则表达式吗?

我正在使用 Swift 包管理器,版本为 Swift 5.7.1。我想用正则表达式编译代码。例如,main.swift可以如下:

let message = "Hello, world"
print(message.replacing(/[aeiou]/, with: "[vowel]"))
Run Code Online (Sandbox Code Playgroud)

我目前对输出和编译不感兴趣。

如果我在 XCode 中创建一个项目,它就可以正常工作。但是,如果我在 Swift 包管理器(使用swift build)中尝试它,它显然无法识别出这/[aeiou]/是一个正则表达式文字。相反,我收到类似的消息'/' is not a prefix unary operator

有没有办法让它与 Swift 包管理器一起工作,或者它根本不支持?

regex swift swift-package-manager

6
推荐指数
1
解决办法
917
查看次数

使用D控制交互过程

我有一个程序等待一行标准输入,然后,在处理它(需要相当长的时间)后,会发出一个答案.程序将接受输入,直到输入流关闭.

我怎么能从D控制该程序?换句话说,我怎么可能

  1. 为子进程提供一系列标准输入.
  2. 等待子进程回答.
  3. 重复一遍,直到我耗尽了我想给它的输入.

我尝试了以下代码,但毫不奇怪,它等待子进程完全完成,然后一次打印输出:

module main;

import std.file;
import std.path;
import std.process;
import std.stdio;

void main(string[] args)
{
    string[] inputs = ["test string 1", "test string 2"];

    auto pipes = pipeProcess(buildPath(getcwd(), "LittleTextProcessingApp"), Redirect.all);
    scope(exit) wait(pipes.pid);

    foreach(input; inputs)
    {
        pipes.stdin.writeln(input);
    }
    pipes.stdin.close;

    foreach(line; pipes.stdout.byLine)
    {
        writeln(line);
    }
}
Run Code Online (Sandbox Code Playgroud)

也就是说,它会在一秒钟的延迟后打印出来,

以下是500毫秒前输入的:测试字符串1
以下是500毫秒前输入的:测试字符串2

所需的行为是它打印

以下是500毫秒前输入的:测试字符串1

半秒后,第二行500毫秒后.

我作为子进程测试的程序的源代码如下:

module main;

import std.stdio;
import core.thread;

void main(string[] args)
{
    foreach(input; stdin.byLine)
    {
        auto duration = 500.msecs;
        stderr.writefln("Doing something for %s....", duration);
        Thread.sleep(duration);
        writefln("The …
Run Code Online (Sandbox Code Playgroud)

d

5
推荐指数
1
解决办法
114
查看次数

Swift 3:将以null结尾的UnsafePointer <UInt8>转换为字符串

我有一个ac api,它返回一个以null结尾的字符串,它是一个类型的数组unsigned char*(对应于UnsafePointer<UInt8>).

Swift有初始化器String(validatingUTF8:),但参数必须是UnsafePointer<CChar>(aka UnsafePointer<Int8>),并且没有简单的方法来在两者之间进行转换.

如何从这个以null结尾的c-string转换为Swift字符串?

string swift

4
推荐指数
1
解决办法
6514
查看次数

可以在 Swift 脚本中使用正则表达式吗?

我想用 \xe2\x80\x9cshebang\xe2\x80\x9d 符号制作一个使用正则表达式文字的 Swift 脚本。例如:

\n
#!/usr/bin/env swift\n\nlet message = "Hello, world"\nprint(message.replacing(/[aeiou]/, with: "[vowel]"))\n
Run Code Online (Sandbox Code Playgroud)\n

在问题中,Swift 包管理器支持正则表达式吗?,我学习了如何使这段代码在 Swift 包管理器中工作。

\n

它可以作为 Swift 脚本使用吗?或者我必须等待未来的更新吗?

\n

regex shebang swift

1
推荐指数
1
解决办法
327
查看次数

标签 统计

swift ×4

regex ×2

cocoa ×1

d ×1

shebang ×1

string ×1

swift-package-manager ×1