为什么我在 PyCharm 中的命令行无法识别 bash 命令?
Why does my commandline within PyCharm not recognize bash commands?
我正在尝试将 Python 中项目的内容复制到剪贴板。由于 KDE Plasma 的错误,我无法使用模块复制到我的剪贴板。我没有尝试解决该问题,而是决定使用以下方法解决它:
os.system('echo text | xclip -sel clip')
我在 return 中遇到的错误是
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
我已经通过卸载 PyCharmCE 的 Flatpak 存储库安装并使用 Snap 存储库重新安装 PycharmCE 2020.1.3 解决了这个问题。
[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
在我看到您使用的是 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
但是,一旦 agian Flatpak 在其 /usr/lib
路径下没有真正的 /usr/lib
,我们必须在 /var/run/host/usr/lib
[=28= 下提供另一个用于共享库查找的环境变量]
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 使事情变得更烦人,所以在我看来最好避免使用它; ).
我正在尝试将 Python 中项目的内容复制到剪贴板。由于 KDE Plasma 的错误,我无法使用模块复制到我的剪贴板。我没有尝试解决该问题,而是决定使用以下方法解决它:
os.system('echo text | xclip -sel clip')
我在 return 中遇到的错误是
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
我已经通过卸载 PyCharmCE 的 Flatpak 存储库安装并使用 Snap 存储库重新安装 PycharmCE 2020.1.3 解决了这个问题。
[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
在我看到您使用的是 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
但是,一旦 agian Flatpak 在其 /usr/lib
路径下没有真正的 /usr/lib
,我们必须在 /var/run/host/usr/lib
[=28= 下提供另一个用于共享库查找的环境变量]
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 使事情变得更烦人,所以在我看来最好避免使用它; ).