In Node.js in die Zwischenablage kopieren?

Lesezeit: 4 Minuten

Benutzer-Avatar
Turm

Gibt es eine Möglichkeit, in Node.js in die Zwischenablage zu kopieren? Irgendwelche Module oder Ideen, was auch immer? Ich verwende Node.js in einer Desktop-Anwendung. Hoffentlich klärt das auf, warum ich möchte, dass es dies erreichen kann.

Benutzer-Avatar
Benjamin Atkin

Für OS X:

function pbcopy(data) {
    var proc = require('child_process').spawn('pbcopy'); 
    proc.stdin.write(data); proc.stdin.end();
}

write() kann einen Puffer oder eine Zeichenkette nehmen. Die Standardcodierung für eine Zeichenfolge ist utf-8.

  • Dies ist so nützlich für schnelle Datentransformationen in der REPL.

    – Wilhelm

    13. August 2020 um 18:46 Uhr

Benutzer-Avatar
Sindre Sorhus

Kasse clipboardy. Damit können Sie plattformübergreifend kopieren/einfügen. Es wird aktiver gepflegt als die copy-paste Modul, das in einer anderen Antwort erwähnt wurde, und es behebt viele der Probleme dieses Moduls.

const clipboardy = require('clipboardy');

// Copy
clipboardy.writeSync('🦄');

// Paste
clipboardy.readSync();
//🦄

  • Es ist besser als das “Kopieren-Einfügen”-Modul, da es auch Doppelbyte-Zeichen unterstützt. Dies hat jedoch ein Problem mit Windows 32-Bit-Betriebssystemen.

    – Ponmudi VN

    19. Juli 2017 um 7:53 Uhr

  • @PonmudiVN Windows 32-Bit-Unterstützung wurde behoben: github.com/sindresorhus/clipboardy/commit/…

    – Sindre Sorhus

    6. Dezember 2017 um 0:21 Uhr

  • Ich habe npm installiert çlipboardy in Cypress. Ich habe eine Schaltfläche in meiner Webanwendung, wenn Sie auf diese Schaltfläche klicken, sollte der Inhalt der Zwischenablage angezeigt werden, aber es gibt undefinierte Eingaben werden sehr geschätzt. stackoverflow.com/questions/61650737/…

    – Fußballplatz

    7. Mai 2020 um 6:36 Uhr

Benutzer-Avatar
Xavi

Hier ist ein Modul, das bietet copy und paste Funktionen: https://github.com/xavi-/node-copy-paste

Wann require("copy-paste").global() ausgeführt wird, werden zwei globale Funktionen hinzugefügt:

> copy("hello") // Asynchronously adds "hello" to clipbroad
> Copy complete
> paste() // Synchronously returns clipboard contents
'hello'

Wie viele der anderen erwähnten Antworten müssen Sie zum Kopieren und Einfügen von Knoten ein externes Programm aufrufen. Im Falle des node-copy-pasteruft es pbcopy/pbpaste (für OS X), xclip (für Linux) und clip (für Windows).

Dieses Modul war sehr hilfreich, als ich viel Arbeit in der REPL für ein Nebenprojekt erledigte. Unnötig zu erwähnen, copy-paste ist nur ein Befehlszeilendienstprogramm – das ist es nicht für Serverarbeit gedacht.

  • Dies ist die beste Antwort. Es ist plattformübergreifend und funktioniert genau so, wie es sollte.

    – gilly3

    16. September 2015 um 17:01 Uhr

  • Vielleicht möchten Sie aus Gründen der SO-Richtlinie Ihren eigenen Code hinzufügen

    – schlepp

    27. Juli 2019 um 11:35 Uhr

Benutzer-Avatar
Ernst Robert

Kürzester Weg in Windows:

const util = require('util');
require('child_process').spawn('clip').stdin.end(util.inspect('content_for_the_clipboard'));

Benutzer-Avatar
chjj

Eine Zwischenablage gehört nicht zu einem Betriebssystem. Es ist ein Konstrukt des Fenstersystems, auf dem das Betriebssystem gerade läuft. Wenn Sie also beispielsweise möchten, dass dies unter X funktioniert, benötigen Sie Bindungen an Xlib und/oder XCB. Xlib-Bindungen für den Knoten existieren tatsächlich: https://github.com/mixu/nwm. Obwohl ich nicht sicher bin, ob es Ihnen Zugriff auf die X-Zwischenablage gibt, könnten Sie am Ende Ihre eigene schreiben. Sie benötigen separate Bindungen für Windows.

Bearbeiten: Wenn Sie etwas Hackiges machen möchten, können Sie auch xclip verwenden:

var exec = require('child_process').exec;

var getClipboard = function(func) {
  exec('/usr/bin/xclip -o -selection clipboard', function(err, stdout, stderr) {
    if (err || stderr) return func(err || new Error(stderr));
    func(null, stdout);
  });
};

getClipboard(function(err, text) {
  if (err) throw err;
  console.log(text);
});

  • Ein Chrom-Äquivalent von copy() zu haben, wäre großartig.

    Benutzer7090116

    6. April 2020 um 20:27 Uhr

Benutzer-Avatar
pimvdb

Ich habe es geschafft, indem ich eine andere Anwendung erstellt habe, die dies handhabt. Es ist sicherlich nicht der beste Weg, aber es funktioniert.

Ich bin unter Windows und habe eine VB.NET-Anwendung erstellt:

Module Module1

    Sub Main()
        Dim text = My.Application.CommandLineArgs(0)
        My.Computer.Clipboard.SetText(text)
        Console.Write(text) ' will appear on stdout
    End Sub
End Module

Dann habe ich in Node.js verwendet child_process.exec So führen Sie die VB.NET-Anwendung aus, wobei die zu kopierenden Daten als Befehlszeilenargument übergeben werden:

require('child_process').exec(
    "CopyToClipboard.exe \"test foo bar\"",

    function(err, stdout, stderr) {
        console.log(stdout); // to confirm the application has been run
    }
);

  • Ein Chrom-Äquivalent von copy() zu haben, wäre großartig.

    Benutzer7090116

    6. April 2020 um 20:27 Uhr

Benutzer-Avatar
FGRibreau

Mac hat eine native Befehlszeile pbcopy für diesen Anwendungsfall:

require('child_process').exec(
    'echo "test foo bar" | pbcopy',

    function(err, stdout, stderr) {
        console.log(stdout); // to confirm the application has been run
    }
);

Gleicher Code für Linux, aber ersetzen pbcopy mit Xclip (apt get install xclip)

  • Interessant! Glaubst du, es gibt eine Windows-Möglichkeit, dies auch zu tun? Und was ist mit dem Bündeln von xclip in meinem Programm, da ich den Benutzer nicht bitten möchte, xclip zu installieren.

    – Turm

    16. Oktober 2011 um 11:45 Uhr

  • Ich habe gefunden, dass es etwas in Windows gibt: echo fooo | clip. Nun, wie kann man das unter Linux haben, ohne den Benutzer zu bitten, etwas zu installieren?

    – Turm

    16. Oktober 2011 um 11:52 Uhr

  • echo fooo | clip kann funktionieren, aber das Ergebnis enthält ein ‘\n’ am Ende der primären Zeichenfolge, es ist außerhalb meiner Erwartung.

    – LIXer

    24. März 2017 um 2:11 Uhr

  • Dies würde nicht funktionieren, wenn die Zeichenfolge nicht-englische Zeichen wie „福星高照“ enthält.

    – AeroWang

    15. August 2021 um 7:12 Uhr

1256800cookie-checkIn Node.js in die Zwischenablage kopieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy