Почему моя командная строка в PyCharm не распознает команды bash?

Я пытаюсь что-то скопировать в буфер обмена для проекта на Python. Я не могу использовать модули для копирования в буфер обмена из-за ошибки в KDE Plasma. Вместо того, чтобы пытаться решить эту проблему, я решил обойти ее с помощью:

os.system('echo text | xclip -sel clip')

Ошибка, которую я получаю в ответ,

sh: xclip: command not found

Xclip установлен и отлично работает в моей собственной командной строке, но с терминалом в Pycharm. Команда sudo не распознана. Я не понимаю, почему они не распознаются, и что я должен сделать, чтобы получить доступ к чему-то вроде xclip из встроенного терминала.


В моем функциональном раскрывающемся списке:

$PATH
bash: /home/danielh/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/var/lib/flatpak/exports/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/var/lib/snapd/snap/bin: No such file or directory

В моем нефункциональном встроенном терминале:

echo $PATH
/home/danielh/PycharmProjects/DetermineDistances/venv/bin:/app/bin:/usr/bin

sudo pacman тоже не распознается, почему я пропускаю эти команды?


[danielh@Pomegranate DetermineDistances]$ which pacman
which: no pacman in (/app/bin:/usr/bin)
[danielh@Pomegranate DetermineDistances]$ which xclip
which: no xclip in (/app/bin:/usr/bin)

Я поместил clipboard.sh в каталог проекта, но даже когда он запущен, xclip не найден. Однако, если я запускаю его со своего терминала, он работает нормально:

subprocess.call('./clipboard.sh') ./clipboard.sh: line 2: xclip: command not found

[danielh@Pomegranate DetermineDistances]$ ./clipboard.sh отлично работает [danielh@Pomegranate DetermineDistances]$ which xclip /usr/bin/xclip тоже работает


Решение @CrazyCoder, похоже, не имеет никакого эффекта. [danielh@Pomegranate bin]$ sudo /var/lib/flatpak/app/com.jetbrains.PyCharm-Community/current/active/export/bin/com.jetbrains.PyCharm-Community PyCharm открывается, но я по-прежнему не могу получить доступ к pacman или xclip


(venv) [danielh@Pomegranate DetermineDistances]$ strace -e stat which xclip
strace: test_ptrace_get_syscall_info: PTRACE_TRACEME: Operation not permitted
strace: ptrace(PTRACE_TRACEME, ...): Operation not permitted
strace: PTRACE_SETOPTIONS: Operation not permitted
strace: detach: waitpid(157): No child processes
strace: Process 157 detached

person Daniel Hodczak    schedule 17.07.2020    source источник
comment
звучит как проблема с переменной PATH, предлагаю вам запустить os.system('echo $PATH') и сообщить результат @Straw, xclip - это не встроенный bash, а двоичный файл   -  person Uku Loskit    schedule 17.07.2020
comment
каков результат which pacman и which xclip?   -  person Uku Loskit    schedule 17.07.2020
comment
это странно. как насчет strace -e stat which xclip?   -  person Uku Loskit    schedule 17.07.2020
comment
sudo не найден, поэтому я не могу этого сделать в первую очередь   -  person Daniel Hodczak    schedule 17.07.2020


Ответы (2)


Копнул немного глубже, после того, как увидел, что вы используете установку Flatpak. У Flatpak есть собственная песочница, так что это действительно было причиной проблемы.

Итак, похоже, что Flatpak создает свой собственный /usr/bin, который совершенно не связан с хостом /usr/bin. Настоящая /usr/bin монтируется под /var/run/host/usr/bin (/usr, /dev все под /var/run/host в общем).

Итак, вот где находится xclip. Итак, если вы хотите запустить xclip, вы должны сначала добавить его в путь:

os.environ["PATH"] = "/var/run/host:" + os.environ["PATH"]

Однако этого недостаточно, поскольку xclip также зависит от разделяемой библиотеки с именем LibXmu, как видно при выполнении команды с этой модификацией:

/var/run/host/usr/bin/xclip: error while loading shared libraries: libXmu.so.6: cannot open shared object file: No such file or directory

Но так как, как только Flatpak снова не имеет настоящего /usr/lib в пути /usr/lib, мы должны указать другую переменную среды для поиска в разделяемой библиотеке в пути /var/run/host/usr/lib.

os.environ["LD_LIBRARY_PATH"] =  "/var/run/host/usr/lib/x86_64-linux-gnu"

Итак, этот код теперь должен работать:

import os
os.environ["LD_LIBRARY_PATH"] =  "/var/run/host/usr/lib/x86_64-linux-gnu"
os.environ["PATH"] = "/var/run/host/usr/bin:" + os.environ["PATH"]
os.system('echo text | xclip -sel clip')

Вывод: Flatpak делает вещи намного более раздражающими, поэтому лучше избегать его, IMO; ).

person Uku Loskit    schedule 17.07.2020

Я решил проблему, удалив установку PyCharmCE из репозитория Flatpak и переустановив PycharmCE 2020.1.3 с помощью репозитория Snap.

[danielh@Pomegranate PycharmProjects]$ whereis xclip
xclip: /usr/bin/xclip /usr/share/man/man1/xclip.1.gz
[danielh@Pomegranate PycharmProjects]$ whereis sudo
sudo: /usr/bin/sudo /usr/lib/sudo /etc/sudo.conf /usr/share/man/man8/sudo.8.gz
person Daniel Hodczak    schedule 17.07.2020