私はSswiftの初心者です。このプロセスを Swift コードから実行するにはどうすればよいですか?
cd Desktop/firebase-mac
npm start
私が実際にやろうとしているのは、Swift コードからクリックして Node サーバーを起動することです。
完全な例:
Desktop
swsh
でファイルを作成し、そのファイルに追加します (rtf や doc ではなく、プレーンテキスト)。#!/usr/bin/env xcrun swift
import Foundation
func shell(launchPath: String, arguments: [String]) -> String {
let process = Process()
process.launchPath = launchPath
process.arguments = arguments
let pipe = Pipe()
process.standardOutput = pipe
process.launch()
let output_from_command = String(data: pipe.fileHandleForReading.readDataToEndOfFile(), encoding: String.Encoding.utf8)!
// remove the trailing new-line char
if output_from_command.characters.count > 0 {
let lastIndex = output_from_command.index(before: output_from_command.endIndex)
return output_from_command[output_from_command.startIndex ..< lastIndex]
}
return output_from_command
}
let output = shell(launchPath: "/bin/date", arguments: [ ])
print(output)
保存して:
cd ~/Desktop
chmod 755 swsh
swift script
。./swsh
次のような出力が得られます。
Sat Mar 25 14:31:39 CET 2017
を編集しswsh
、shell(...
行を次のように変更します。
let output = shell(launchPath: "/usr/bin/env", arguments: [ "date" ])
それを実行すると、再び日付が取得されますが、今は:
swsh
実行しました/usr/bin/env
(引数付きdate
)/usr/bin/env
コマンドを見つけますdate
次に、 に別のファイルを作成し~/Desktop
、名前をfrom_swift
.
それに追加
echo "Today's date is $(date)"
ファイルを変更しますswsh
。shell
行を次のように変更します。
let output = shell(launchPath: "./from_swift", arguments: [ ])
./from_swift
- への相対パスを使用することに注意してください.
(私たちは~/Desktop
ディレクトリ内にいます)。swift プログラムを実行します。
./swsh
出力:
2017-03-25 14:42:20.176 swift[48479:638098] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'launch path not accessible'
もちろん、スクリプトfrom_swift
はまだ実行可能ではありません。だから実行する:
chmod 755 from_swift
# and run
./swsh
再びエラー:
2017-03-25 14:45:38.523 swift[48520:639486] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Couldn't posix_spawn: error 8'
これは、from_swift
がスクリプト (コンパイルされたバイナリではない) であるため、オペレーティング システムはスクリプトの内容を解釈するバイナリを認識する必要があるためです。これはスクリプトを次のようにshell script
編集するためですfrom_swift
。
#!/bin/sh
echo "Today's date is $(date)"
追加された「shebang」行に注意してください#!/bin/sh
。スウィフト./swsh
を実行して取得します
Today's date is Sat Mar 25 14:50:23 CET 2017
Horray、あなたはbash
から最初のスクリプトを実行しましたswift
。;)
もちろん、あなたが使用することができます/usr/bin/env
でshebang
、今変更の内容from_swift
:たとえばへ
#!/usr/bin/env perl
use strict;
use utf8;
use English;
binmode STDOUT, ":utf8";
printf "The $EXECUTABLE_NAME (ver:$PERL_VERSION) runs me: $0\n";
printf "I ❤️ perl!\n";
を実行する./swsh
と、次のようになります。
The /usr/bin/perl (ver:v5.18.2) runs me: ./from_swift
I ❤️ perl!
注:ファイル内では何も変更せず./swsh
、スクリプト ファイルのみを変更しました./from_swift
。
上記のすべては、次を使用して行われます。
$ uname -a
Darwin nox.local 16.4.0 Darwin Kernel Version 16.4.0: Thu Dec 22 22:53:21 PST 2016; root:xnu-3789.41.3~3/RELEASE_X86_64 x86_64
$ swift --version
Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
Target: x86_64-apple-macosx10.9
そのため、任意のスクリプトを簡単に作成して実行できます。したがって、あなたはあなたの~/Desktop/from_swift
#!/bin/sh
cd $HOME/Desktop/firebase-mac
npm start
から直接実行することは可能ですがswsh
(Jens Meder が提案しました)、これを使用すると、指定されたスクリプト ファイルから何かを実行する非常に簡単な方法が得られます。
覚えておいてください:process.launch()
は次のいずれかを実行します:
shebang
行をchmod 755 /path/to/script.file
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加