Home php c# sql c c++ javascript python java go android git linux asp.net django .net node.js ios xcode cocoa iphone mysql tomcat mongodb bash objective-c scala visual-studio apache elasticsearch jar eclipse jquery ruby-on-rails ruby rubygems android-studio spring lua sqlite emacs ubuntu perl docker swift amazon-web-services svn html ajax xml java-ee maven intellij-idea rvm macos unix css ipad postgresql css3 json windows-server vue.js typescript oracle hibernate internet-explorer github tensorflow laravel symfony redis html5 google-app-engine nginx firefox sqlalchemy lucene erlang flask vim solr webview facebook zend-framework virtualenv nosql ide twitter safari flutter bundle phonegap centos Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 32

0
votes
answers
8 views
+10

新手 - 在Mac上的Javascript代碼來控制Chrome

1

我一直在學習javascript瀏覽通過OpenStack並需要一點指導,我已經編寫了下面的代碼在Chrome中打開一個網站(我的默認瀏覽器),等待5秒,然後使用do/while循環刷新10次。新手 - 在Mac上的Javascript代碼來控制Chrome

它看起來不錯,因爲我想從終端運行它嗎?我一直在Chrome開發人員控制檯中運行此操作,並希望在我的Mac(10.9.5)上運行它,是否僅通過automator運行它?

非常感謝您的幫助!

var vcount = 0; 
 

 
function sleep(time) { 
 
    return new Promise((resolve) => setTimeout(resolve, time)); 
 
} 
 

 
do { 
 
    window.location.assign("https://www.w3schools.com"); 
 
    sleep(10000).then(() => {}); 
 
    vcount++; 
 
} 
 
while (vcount < 10);

+1

不,因爲'sleep(10000).then((=)=> {});'不會「暫停」 - 同樣,一旦你改變了當前位置,這個腳本將不再處於當前頁面,不管怎樣, –

沙发
0
1

您需要使用等待真正暫停exectution:

(async function(){ 
    do { 
    window.location.assign("https://www.w3schools.com"); 
    await sleep(10000); 
    vcount++; 
    } while (vcount < 10); 
})(); 
+0

啊,謝謝喬納斯,我試圖找到那種類型的命令,我正在尋找'睡眠'和'等待',然後偶然發現了我用過的方法,我會用你的代碼! – PCF

板凳
0
0

有很多方法可以做到你想要什麼,@JonasW給了一個他們,這裏是一個替代方案:

function sleep(ms) { 
    const waitUntil = new Date().getTime() + ms; 
    while (new Date().getTime() < waitUntil) true; 
} 

這將在沒有await/Promise的情況下運行。

編輯

??此外,你需要收拾一切功能,所以它不會凍結瀏覽器,因爲JavaScript是在一個線程中運行:

setTimeout(function() { 
    /* Your code */ 
}, 0) 
+0

謝謝亞瑟,是否有任何理由使用一種方法高於另一種?另外,如何進行單一動作有多種方法? – PCF

+0

@PCF是的,有一個原因:並非所有的瀏覽器都支持相同的功能,'await'和'Promise'是在最近版本的JavaScript中引入的,並且在最新版本的Chrome,Safari和Firefox上都受支持。如果您使用我的方法,它將在更多瀏覽器(如IE)上得到支持。而且,是的,在每種編程語言中,都有很多方法可以做同樣的事情。這就像同義詞。 –

+0

這是一個糟糕的做法,因爲它凍結了瀏覽器。 –

0
votes
answers
7 views
+10

在Mac OS Docker上運行REST應用程序時的空響應

0

我使用SBT創建了一個簡單的scala應用程序(akka-http REST服務)。在Mac OS Docker上運行REST應用程序時的空響應

這是應用程序的主類:

object UserApiWebService extends App { 

    override def main(args: Array[String]): Unit = { 

    implicit val system: ActorSystem = ActorSystem("user-api-system") 
    implicit val executionContext: ExecutionContext = system.dispatcher 
    implicit val materializer: ActorMaterializer = ActorMaterializer() 

    val userApiRoute = new UserApiRoute 
    val userApiRoutes = new UserApiRoutes(userApiRoute) 


    val config = ConfigFactory.load() 
    val host = config.getString("http.host") 
    val port = config.getInt("http.port") 

    println(s"Starting server on $host:$port..") 
    Http().bindAndHandle(userApiRoutes.routes, host, port) 
    println(s"Server started on $host:$port..") } 

} 

和我application.conf包含http.host = 「127.0.0.1」 和http.port = 9000

當我運行在本地運行sbt run所有作品的應用大。

所以我決定嘗試docker併爲我的Akka應用程序創建一個容器。 我使用sbt DockerPlugin並運行命令sbt docker:publishDocker它在本地機器上創建docker鏡像。

所以我用命令

docker run -p 9000:9000 --name user-api user-api:0.1.0-SNAPSHOT 

開始泊塢窗容器,我可以看到的是,容器運行正常。

如果我檢查API-REST應用程序工作正常使用命令:

curl -XGET 127.0.0.1:9000/user/34 

我得到curl: (52) Empty reply from server作爲響應。

如果我在使用docker exec -it a556b8846340 /bin/bash輸入容器後嘗試相同的命令,我會得到正確的響應。

我正在使用macOS 10.12.6和docker版本17.09.1-ce的mac上工作。

有人可以幫助我嗎?

沙发
0
1

由於您在Mac上運行,因此您需要docker-machine ip才能與本地VM (reference)交談。

所以,你需要捲曲配置泊塢窗機後進行更新,以curl -X GET http://$(docker-machine ip):9000/user/34

+0

作品也localhost上,由於 –

+0

@albertoadami聽起來不錯! – chenrui

0
votes
answers
7 views
+10

Bash - 在分開的子文件夾中合併文件

0

因此,我正在尋找一種方法來將多個子文件夾中的.html文件保存在自己的位置。Bash - 在分開的子文件夾中合併文件

實際情況:

$ Folder1 
. 
├── Subfolder1 
│ └── File1.html 
    └── File2.html 
├── Subfolder2 
│ └── File1.html 
    └── File2.html 

期望的結果:

$ Folder1 
. 
├── Subfolder1 
│ └── Mergedfile1.html 
    └── File1.html 
    └── File2.html 
├── Subfolder2 
│ └── Mergedfile2.html 
    └── File1.html 
    └── File2.html 

到目前爲止,我想出了這個:

find . -type f -name *.html -exec cat {} + > Mergedfile.html 

但這種結合了所有的所有文件Folder1子文件夾,而我想讓他們分開。

非常感謝!

+0

我想你想要的是'-maxdepth 1個型D'到你的'find'命令:) –

沙发
0
0

像由AK_說,你可以用找到的exec。

find Folder1/ -mindepth 1 -maxdepth 1 -type d -exec sh -c "rep='{}';cat "'"$rep"'"/*.html > "'"$rep"'"/Mergedfile.html" ; 
+0

你不能使用'{} 「就這樣!這是危險的,並不適用於所有版本的「find」。危險:如果有一個名爲''的文件會發生什麼? rm -rf /#'? POSIX明確指出[如果utility_name或參數字符串包含兩個字符「{}」,但不是兩個字符「{}」,則它是實現定義的,find是否會替換這兩個字符或不改變地使用該字符串。] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html)。所以你使用'{}'是危險的,不正確的。 –

+0

這工作完美! Justed運行另一個命令,以便在戰後再添加子文件夾名稱。非常感謝@ctac_! – Hugo

板凳
0
1

您可以循環在具有for聲明所有子文件夾:

for i in Folder1/SubFolder*; do 
    cat "$i"/File*.html > MergeFile$(echo "$i" | sed 's,.*([0-9]+)$,1,').html 
done 
+0

未加引號的變量將在這有限的情況下工作,但爲了您的代碼在公共角情況下工作,你應該*總是*引用包含帶雙引號的文件名的變量。另請參閱https://stackoverflow.com/questions/10067266/when-to-wrap-quotes-around-a-shell-variable – tripleee

+0

你是對的...我編輯我的帖子 – oliv

0
votes
answers
7 views
+10

如何在Linux或Mac中編譯用於Windows的靜態.lib庫

1

我正在尋找在Linux或Mac中爲Windows編譯靜態庫的方式,似乎有交叉編譯器爲Windows生成.a庫,如this one,但那是不是我想要的,我想要的是針對Windows的.lib靜態庫文件,最好是Visual Studio。我知道我可以運行Windows虛擬機並使用Visual Studio,但這太重了,無法在命令行中完成。如何在Linux或Mac中編譯用於Windows的靜態.lib庫

沙发
0
1

類Unix操作系統(Linux操作系統,MacOS的,等等)一個靜態庫裝置 對象文件的ar archivear是GNU通用 的目的歸檔器。它並不關心你保存在檔案中的文件類型。當它們碰巧是目標文件時,它只是將其稱爲「靜態庫」的自定義的 。而 它也只是一個ar存檔的定製,稱爲*.a。你可以稱它爲 *.lib,或其他任何東西。

對於Visual Studio,一個靜態庫指的通常是由微軟工具LIB創建PE格式的對象文件 存檔。

Microsoft LIB存檔的格式實際上與Unix ar存檔的格式相同。微軟 剛剛通過它,很久以前。

所以,如果你使用你的發行版的PE交叉編譯 然後再將其歸檔編譯Linux上的一些PE目標文件與ar一個*.lib,你也得爲自己的靜態庫,是很好的在Windows 去與Visual Studio編譯器。

那麼,只要這些目標文件有C二進制接口。 如果它們中的任何一個具有C++接口,則它們是無用的:Microsoft和GCC C++編譯器使用不同的名稱綁定協議,否則ABI不兼容。

演示

我們開始在Linux與靜態庫的一些源代碼:

的hello.c

#include <stdio.h> 

void hello(void) 
{ 
    puts("Hello world"); 
} 

交叉編譯:

$ x86_64-w64-mingw32-gcc-win32 -o hello.obj -c hello.c 

使靜態庫:

$ ar rcs hello.lib hello.obj 

那麼這是怎麼回事程序要與hello.lib鏈接:

爲主。ç

extern void hello(void); 

int main(void) 
{ 
    hello(); 
    return 0; 
} 

現在我們跳進一個Windows 10 VM,我們正在尋找在我們 只是通過共享文件夾中創建的文件:

E:developsoxstatlib>dir 
Volume in drive E is VBOX_imk 
Volume Serial Number is 0000-0804 

Directory of E:developsoxstatlib 

03/12/2017 18:37    72 main.c 
03/12/2017 18:29    978 hello.lib 
03/12/2017 18:26    66 hello.c 
03/12/2017 18:27    832 hello.obj 
       4 File(s)   1,948 bytes 
       0 Dir(s) 153,282,871,296 bytes free 

編譯並鏈接我們的程序:

E:developsoxstatlib>cl /Fehello.exe main.c hello.lib 
Microsoft (R) C/C++ Optimizing Compiler Version 19.11.25547 for x64 
Copyright (C) Microsoft Corporation. All rights reserved. 

main.c 
Microsoft (R) Incremental Linker Version 14.11.25547.0 
Copyright (C) Microsoft Corporation. All rights reserved. 

/out:hello.exe 
main.obj 
hello.lib 

運行:

E:developsoxstatlib>hello 
Hello world 
+0

'extern「C」'怎麼樣?這有助於與gcc/VisualStudio兼容的C++名稱修改? –

+1

@BarmakShemirani確實,雖然'extern「C」'範圍內的API必須是有效的,開頭的C API必須是 。我已經使措辭更準確。 –

+0

非常感謝你這麼詳細的解釋和例子,非常感謝。 – Ryan

0
votes
answers
7 views
+10

在Mac OS上啓用傳入Telnet連接10.12

0

除了下面的命令外我找不到任何東西,但是這也不起作用。我需要允許來自PC應用程序的傳入telnet連接連接到我的Mac。我知道SSH更好,但我必須有telnet連接到我的Mac OS。有人知道嗎?在Mac OS上啓用傳入Telnet連接10.12

這是我發現允許傳入的telnet連接的唯一的東西,但是這不起作用。

須藤launchctl負載-w /System/Library/LaunchDaemons/telnet.plist

-Seth

沙发
0
0

根據蘋果支持: 不能使用Telnet登錄到您的Mac。

請參閱here

0
votes
answers
6 views
+10

從Java項目內啓動.app?

3

我有一個.app應用程序,我想將其包含在我的項目中,並從jar中啓動它。以下是我迄今爲止:從Java項目內啓動.app?

Runtime.getRuntime().exec(new String[] { "open", "SomeApp.app"});

SomeApp.app被放置在src文件夾的根目錄。

沙发
0
3

您需要執行

open /path/to/some.app 

Runtime.getRuntime().exec(new String[] { "open", "/path/to/app/SomeApp.app"}); 

現在你的應用程序是在罐子,所以它不會是一個應用程序文件,任何你就越需要在/path/to/app

有它在磁盤上

您需要從.jar中提取.app文件,然後執行它here是如何去做的

0
votes
answers
6 views
+10

加載視圖從XIB和獲取零的MacOS應用程序

0

我想從xib文件加載視圖。我期望做的事情對我來說似乎很簡單,但由於某種原因,這比我想象的要困難得多。我只是有一個自定義視圖(帶有標籤,按鈕和表格),我想在同一個窗口中多次重複使用(在堆棧視圖中)。這裏是我的代碼爲自定義視圖加載視圖從XIB和獲取零的MacOS應用程序

class PlatformView: NSView { 
    @IBOutlet var testLabel: NSTextField! 

    required init?(coder decoder: NSCoder) { 
     super.init(coder: decoder) 
    } 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     self.testLabel.stringValue = "Init" 
    } 

    override func draw(_ dirtyRect: NSRect) { 
     super.draw(dirtyRect) 

     // Drawing code here. 
    } 
} 

這是我的視圖在視圖主視圖控制器負載。我做了兩次,因爲我需要在堆棧視圖中使用兩個相同的視圖。問題是我得到一個錯誤。這條線路沒有let topLevelObjects = objectArray2?.firstObject as? PlatformView,並導致很多問題。這隻有在我運行應用程序時纔會發生。這是非常隨機的,我不知道它爲什麼會發生。有一個更好的方法嗎?或者我在我的代碼中做錯了什麼?

var objectArray:NSArray? 
guard let nib = NSNib(nibNamed: NSNib.Name(rawValue: "PlatformView"), bundle: nil) else {return} 
if nib.instantiate(withOwner: self, topLevelObjects: &objectArray), let topLevelObjects = objectArray?.firstObject as? PlatformView { 
    self.platformStackView.addArrangedSubview(topLevelObjects) 
    self.firstPlatformView = topLevelObjects 
} 

if nib.instantiate(withOwner: self, topLevelObjects: &objectArray), let topLevelObjects = objectArray?.firstObject as? PlatformView { 
    self.platformStackView.addArrangedSubview(topLevelObjects) 
    self.secondPlatformView = topLevelObjects 
} 
+0

您不能保證firstObject是您正在尋找的PlatformView。可以有多個頂級對象,因此您應該檢查所有您想要的PlatformView。在我的測試中,我在XIB文件中只有一個視圖(具有子視圖),但界面生成器還添加了其他我需要忽略的內容。在我的測試中,頂級對象是我的TestView和NSApplication的一個實例。我不得不檢查數組以獲得第二個項目的TestView。 –

沙发
0
0

的實例化返回頂層對象的XIB文件,其中一些界面生成器本身可能已添加的陣列(見XIB的佈局,如果你真的很好奇吧)。

簡單的方式是搜索返回的topLevelObjects您PlatformView這樣的:

if nib.instantiate(withOwner: self, topLevelObjects: &objectArray) { 
    for object in topLevelObjects { 
     if let platformView = object as? PlatformView { 
      self.platformStackView.addArrangedSubview(platformView) 
      self.firstPlatformView = platformView 
     } 
    } 
} 

但是假設你肯定你的PlatformView是在廈門國際銀行一個更好的解決方案是這樣的:

if nib.instantiate(withOwner: self, topLevelObjects: &objectArray) { 
    if let topLevelObjects = objectArray { 
     let platformView = topLevelObjects.flatMap({ object in return object as? PlatformView }).first! 
     self.platformStackView.addArrangedSubview(platformView) 
     self.firstPlatformView = platformView 
    } 
} 

正如我所說,你必須小心,因爲強制解包的可選項。

+0

在平面圖之前引用了什麼'topLevelObjects?如果你打算把'objectArray'也不起作用。第一種方法似乎最初工作時,我試圖它,但如果有一個更優雅的解決方案,我寧願使用它。 –

+0

對不起。我已經更新了我的示例,因爲我已將可選的objectArray解包爲一個使用的權威數組。 –

0
votes
answers
6 views
+10

mac kernel-extension的錯誤代碼含義是什麼?

0

我計劃約在Mac屯內核擴展,我用的是API proto_register_plumber喜歡如下:mac kernel-extension的錯誤代碼含義是什麼?

err = proto_register_plumber(PF_INET, IFNET_FAMILY_TUN, method_attach, method_detach); 
if (err) { 
    printf("error code is : %d
", err); 
} 

在一個MAC(10.13),它返回17,它意味着什麼?我該如何解決它?

我閱讀了關於https://developer.apple.com/documentation/kernel/1532491-proto_register_plumber?language=objc的API文檔,但我沒有發現任何有關錯誤代碼的含義。

沙发
0
1

17幾乎肯定是errno,特別是因爲這是來自KPI的BSD部分。如果您在errno.h看你會發現,它對應於EEXIST

#define EEXIST  17  /* File exists */ 

在你的API調用的情況下,這可能意味着已經是你想註冊登記的事情的東西。我不熟悉的proto_register_plumber()功能,但非常快看its source code顯示功能,這似乎證實了我的懷疑開始靠近下列檢查:

lck_mtx_lock(proto_family_mutex); 

TAILQ_FOREACH(proto_family, &proto_family_head, proto_fam_next) { 
    if (proto_family->proto_family == protocol_family && 
     proto_family->if_family == interface_family) { 
     lck_mtx_unlock(proto_family_mutex); 
     return (EEXIST); 
    } 
} 

難道說:

  • 你以前註冊過處理程序,卸載了你的kext,它沒有註銷它,然後你重新加載了你的kext,試圖重新註冊它?在這種情況下,重新啓動(並修復kext stop功能!)應該修復它。
  • 另一個加載的kext已經註冊了它自己的處理程序?如果是這樣,請嘗試卸載可能的候選人。
  • xnu內核已經爲此協議族提供了默認處理程序?也許你需要以不同的方式去做你想要做的事情。
+0

坦克,這是因爲另一個kext註冊其處理程序! – waitianlou

0
votes
answers
6 views
+10

節點child_process沒有在Mac上執行更多的一個命令,但與Windows正常工作

0

我已經編寫了節點child_process exec克隆代碼從回購,然後在該文件夾上執行npm安裝。一切工作正常與Windows機器,但不是與Mac機。當通過cmd提示命令時,它也可以正常工作。這怎麼能解決。節點child_process沒有在Mac上執行更多的一個命令,但與Windows正常工作

var projectSetup = myexec("git clone http://127.0.0.1/username/projectName.git & cd projectName & sudo npm install"); 
projectSetup.on("exit", function(data) { 
    console.log("Exit "+ data); 
}); 
沙发
0
0

在Windows命令&字符分隔開是按順序運行的命令,所以在Windows的git clone之前執行cdnpm之後cd完成執行將完成。想必這就是你想要發生的事情。

但是,在Mac上&的意思是「將上述命令作爲後臺進程運行,並立即執行以下命令,而無需等待第一個命令完成」。因此,在Mac中,該行中的所有三個命令將作爲單獨的獨立進程同時執行,即使命令成功,也不會爲npm命令建立新的工作目錄。所以會發生什麼,但結果不會是你想要的。

Mac上Windows &分隔符的等價物是;字符,因此一種解決方案是爲每個平臺構建和執行不同的命令字符串。 (如果決定這樣做,JavaScript字符串join()方法將很有用)。

另一種方法是利用Windows和Mac都瞭解&&分隔符的事實,這意味着「僅在執行下一個命令後前一個成功完成「。因此,您可以在您的命令字符串中更改&&&,並且這應該可以在兩個平臺上運行,並且還有其他好處,例如,如果出現問題(例如,git clone失敗),則不會執行可能會污染您的目錄的額外工作樹(例如,如果未創建projectName目錄,則在原始父目錄中運行npm install)。

+0

非常感謝你如此快速的迴應。它解決了我的問題:) –

0
votes
answers
6 views
+10

JavaScript的不工作在Safari(蘋果機和iOS)

1

我實現了使用JavaScript即時搜索功能在我的傑奇網站: https://cecilialee.github.io(庫:https://github.com/cecilialee/cecilialee.github.ioJavaScript的不工作在Safari(蘋果機和iOS)

它完美的Chrome和Firefox。但是,當我在Safari上測試它時,無論在Mac或iPhone上,腳本似乎都不起作用。

我該怎麼辦?

沙发
0
3

好的,我找到了答案。

當我檢查Safari時,發現SyntaxError: Can't create duplicate variable that shadows a global property: 'results'

這顯然是個問題的Safari具有宣佈一個讓/ const的 變量共享相同的名稱作爲所選擇的id屬性。我有 一些用const聲明的變量,並得到相同的錯誤。 改變讓和仍然得到它。更改爲VAR,它工作。

參考: "can't create duplicate variable that shadows a global property"

因此,我改變了我的一些JavaScript的常量,以避免重複的ID。劇本又像魅力一樣起作用!