【发布时间】:2013-07-25 02:00:35
【问题描述】:
我正在学习 Python,同时将一些 bash 脚本转换为 Python shell 脚本。我还不明白的一件事是如何处理这些脚本中使用的 heredocs。以下是 bash 脚本如何使用 heredocs 的两个示例:
我需要知道如何在 Python 中做的最重要的事情是第一种情况,其中 heredoc 用于提供对命令的标准响应,以便命令可以非交互方式运行:
sudo command << 'EOF'
prompt_response1
prompt_response2
EOF
其次,tee就是这样用来创建需要sudo权限的文件的:
sudo tee /etc/xdg/autostart/updateNotificationChecker.desktop > /dev/null << 'EOF'
[Desktop Entry]
Name=Update Notification
Exec=bash /usr/local/bin/updateNotification.sh
Terminal=false
Type=Application
NoDisplay=true
EOF
我将如何在 Python 中做这些事情?
【问题讨论】:
-
我必须建议您学习一些 Python 方法来执行
sudo command <<'EOF'描述的操作,而不是像在 bash 中那样启动子进程。很可能,有一个可用的模块或库可供您针对这种情况进行探索,因此您可以在纯 python 中完成,而不是 fork() out 或上帝禁止system() -
这听起来是个好建议......现在只需要知道如何去做。
-
这只是学习语言及其提供的工具的问题;我能想象的唯一问题是提升到root权限。在程序中间跳转到root不是很好。
-
对于像
sudo这样的事情,我认为shell 脚本是最好的。这样的事情在 Python 中很难,当你使用system()或popen2时,你会得到一个不必要的复杂程序。在 shell 中做的事情比在 Python 中做得更好。关于 heredocs 的问题,在 Python 中可以使用多行字符串(使用textwrap.dedent()使它们看起来更好)。 -
@AntonisChristofides 和@JoshMcGee:感谢
sudo上的信息。