我在 Ubuntu 20.04 系统,我正在使用 Python 3.8 编写一个使用可配置的 bash 行执行多项操作的脚本,但其中之一是它创建桌面快捷方式。
这个单行命令创建一个桌面快捷方式,当我直接在我的终端中执行它时,它可以完美运行 :
echo "[Desktop Entry]"$'\n'"Type=Application"$'\n'"Name[en_US]=Documents"$'\n'"Exec=pcmanfm ~/Documents"$'\n'"Icon=system-file-manager" > ~/Desktop/1;
但是,当我在 Python 中执行它时,如下所示:foobar.py
rl = """echo "[Desktop Entry]"$'\n'"Type=Application"$'\n'"Name[en_US]=Documents"$'\n'"Exec=pcmanfm ~/Documents"$'\n'"Icon=system-file-manager" > ~/Desktop/1;"""
subprocess.run(rl, shell=True)
...而不是使用正确的名称、图标和操作创建桌面快捷方式,它会创建一个包含以下文本的空文件 :0.txt
:[Desktop Entry]$\nType=Application$\nName[en_US]=Sign Out$\nExec=/home/agent/QaSC/login/login.bin$\nIcon=system-switch-user
是否有任何特殊原因导致 Python 处理换行符的方式与 bash shell 不同,如果是,我该如何解决这个问题?
最佳答案
$'...'
是 bash
扩展名,但 shell=True
时使用的默认 shell指定为 sh
.使用 executable
用于指定备用外壳的选项。
subprocess.run(rl, shell=True, executable='/bin/bash')
关于python - 使用 echo 写入文件的换行符在 shell 中有效,但在 Python 3 中为文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72520380/