【发布时间】:2016-05-23 21:23:22
【问题描述】:
我是一个完整的 Python 新手,但我需要创建一个小脚本作为更大项目的一部分。
我正在尝试使用一个小的 Python 脚本将变量输入到 Unix 文件中的一行代码中。我一直在尝试使用subprocess.call(),它使我能够执行我需要的命令,但不允许我放入变量中。
我一直在尝试以下方法:
import subprocess
var="some_variable"
subprocess.call(['sudo', 'sed', '-i', '-e' 's/line_to_replace.*/replacement_line' + var, /path/to/file.conf])
【问题讨论】:
-
如果您只想以最好的方式从 Python 中替换文件的单行,为什么要让“使用 sed”成为您问题的一部分?
-
...特别是,
sed的-i参数是非标准功能——纯 POSIX 指定的sed根本无法满足您的要求。 -
另外,您说的是“特定行”,但这不是您的代码所做的:它按内容匹配,而不是按行号匹配;您没有指定该行,这意味着该行...嗯,不是特定的。
-
你能解释一下脚本是如何无法完成你想要它做的事情的吗?如果您需要以 root 身份运行它,最好从子进程调用中删除“sudo”,而是以 root/sudo 身份运行 python 脚本本身。我不确定句柄子进程在使用 sudo 时是否会处理可能的密码提示。
-
@HåkenLid,
subprocess除非被告知,否则不会更改 stdin/stdout/stderr,因此无需“处理”任何提示;它将直接传递到控制台。 (如果用户没有从带有 TTY 的某个地方运行它——例如,如果这个脚本是由 cron 调用的——许多sudo配置将导致它立即失败,但是......好吧,有sudo有这么多可能的配置方式,以至于潜入那种蜡球并不能很好地利用我们的时间。
标签: python sed subprocess