Node.js의 클립 보드에 복사 하시겠습니까?


93

Node.js에서 클립 보드에 복사 할 수있는 방법이 있습니까? 모듈이나 아이디어는 무엇입니까? 데스크톱 애플리케이션에서 Node.js를 사용하고 있습니다. 이것이 내가 이것을 달성 할 수 있기를 바라는 이유를 명확히하기를 바랍니다.

답변:


19

클립 보드는 운영 체제에 고유하지 않습니다. 운영 체제가 실행되는 모든 윈도우 시스템의 구성입니다. 예를 들어 이것이 X에서 작동하도록하려면 Xlib 및 / 또는 XCB에 대한 바인딩이 필요합니다. 노드에 대한 Xlib 바인딩은 실제로 존재합니다 : https://github.com/mixu/nwm . X 클립 보드에 액세스 할 수 있는지 여부는 확실하지 않지만 직접 작성하게 될 수도 있습니다. 창에 대한 별도의 바인딩이 필요합니다.

편집 : 뭔가 해키를 원한다면 xclip을 사용할 수도 있습니다.

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);
});

1
copy ()와 동등한 크롬을 갖는 것은 멋질 것입니다.

97

OS X의 경우 :

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

write()버퍼 또는 문자열을 사용할 수 있습니다. 문자열의 기본 인코딩은 utf-8입니다.


1
이것은 REPL에서 빠른 데이터 변환에 매우 유용합니다.
William

매우 유용한 감사합니다
t3__rry

80

확인하십시오 clipboardy. 플랫폼 간 복사 / 붙여 넣기를 할 수 있습니다. 다른 답변에서 언급 한copy-paste 모듈 보다 더 적극적으로 유지 관리되며 해당 모듈의 많은 문제를 해결합니다.

const clipboardy = require('clipboardy');

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

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

2 바이트 문자도 지원하므로 "복사-붙여 넣기"모듈보다 낫습니다. 그러나 이것은 Windows 32 비트 OS에 문제가 있습니다.
Ponmudi VN

1
@PonmudiVN Windows 32 비트 지원이 수정되었습니다. github.com/sindresorhus/clipboardy/commit/…
Sindre Sorhus

npm을 cypress에 설치 çlipboardy했습니다. 웹 애플리케이션에 버튼이 있습니다. 버튼을 클릭하면 클립 보드 콘텐츠가 표시되지만 정의되지 않은 입력이 제공됩니다. stackoverflow.com/questions/61650737/…
soccerway

31

다음은 제공 copy하고 paste기능 하는 모듈입니다 : https://github.com/xavi-/node-copy-paste

require("copy-paste").global()실행되는, 두 세계 기능이 추가됩니다

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

언급 된 다른 많은 답변과 마찬가지로 노드에 복사하여 붙여 넣으려면 외부 프로그램을 호출해야합니다. 의 경우 (OSX의 경우), (Linux의 경우) 및 (Windows 의 경우)를 node-copy-paste호출합니다 .pbcopy/pbpastexclipclip

이 모듈은 제가 사이드 프로젝트를 위해 REPL에서 많은 작업을 할 때 매우 유용했습니다. 말할 필요도없이 copy-paste명령 줄 유틸리티 일 뿐이며 서버 작업을위한 것이 아닙니다 .


2
이것이 최고의 답변입니다. 크로스 플랫폼이며 정상적으로 작동합니다.
gilly3 2015 년

1
이 SO 정책을 위해, 자신의 코드의 추가 할 수 있습니다
towc

18

Windows에서 가장 짧은 방법 :

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

1
공장! 감사합니다 ...하지만 util먼저 요구해야합니다 .
LIXer

2
감사! "util"종속성이 필요하지 않습니다. require ( 'child_process'). spawn ( 'clip'). stdin.end ( "content_for_the_clipboard");
darmis dec.

나는 운이없는 Electon 메인과 렌더링 프로세스에서 테스트 한 것을 ReferenceError: util is not defined포함하여 먼저 얻었습니다 const util = require("util"). 노드 12.14.1 CLI에서 작동했습니다. 유스 케이스에 따라 util이 안전한쪽에 있도록 정의해야한다고 말하는 것이 안전하다고 생각합니다.
Benargee

이것은 거의 작동합니다 : 주위에 작은 따옴표가있는 문자열을 복사합니다. 누구든지이 행동을 방지하는 방법을 알고 있습니까?
m4cbeth

3

나는 이것을 처리하는 다른 응용 프로그램을 만들어서 그렇게 할 수 있었다. 확실히 최선의 방법은 아니지만 작동합니다.

저는 Windows에 있고 VB.NET 응용 프로그램을 만들었습니다.

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

그런 다음 Node.js에서 child_process.exec복사 할 데이터를 명령 줄 인수로 전달하여 VB.NET 응용 프로그램을 실행했습니다.

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

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

명령 줄 내에서 직접이 작업을 수행 할 수 있다고 생각하십니까? 이를 위해 앱을 작성한다는 것은 Mac, Linux 및 Windows 용으로 컴파일해야 함을 의미합니다.
Tower

@rFactor : 저는 Mac / Linux에 대한 경험이 전혀 없습니다. 두렵고 내장 된 클립 보드 명령을 알지 못합니다.
pimvdb

나는 'echo "test foo bar"명령을 사용한다. clip ', 작동합니다. 하지만 결과는 ... 내 일을 나누기, 줄 바꿈을 가지고 \ n
LIXer

3

Mac에는 pbcopy이 사용 사례에 대한 기본 명령 줄 이 있습니다.

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

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

리눅스에 대한 동일 코드 만 교체 pbcopy와 함께 XCLIP ( apt get install xclip)


흥미 롭군요! 이 작업을 수행하는 Windows 방법이 있다고 생각하십니까? 그리고 사용자에게 xclip 설치를 요청하고 싶지 않기 때문에 내 프로그램에 xclip을 번들링하는 것은 어떻습니까?
Tower

1
Windows에 뭔가 있음을 발견했습니다 echo fooo | clip.. 이제 사용자에게 무언가를 설치하도록 요청하지 않고 Linux에서 어떻게해야합니까?
Tower

echo fooo | clip작동 할 수 있지만 결과는 원시 문자열의 마지막에 '\ n'을 포함합니다. 내 기대를 벗어났습니다.
LIXer 2017 년

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.