首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >subprocess.call中sed未终止的命令

subprocess.call中sed未终止的命令
EN

Stack Overflow用户
提问于 2013-11-14 15:36:56
回答 2查看 585关注 0票数 0

对于这个脚本,我必须使用python的subprocess.call模块。我需要查看以下字符串的文件:

代码语言:javascript
复制
"absolute/path/to/your/lib"

并将其改为:

代码语言:javascript
复制
/var/www/twiki/lib

我的脚本在下面,但是当我运行它时,我得到了输出:

代码语言:javascript
复制
sed: -e expression #1, char 59: unterminated `s' command

下面是我使用python的subprocess.call模块的命令:

代码语言:javascript
复制
subprocess.call(['sed', '-e', 's/\"absolute\/path\/to\/your\/lib\/\"\/var\/www\/twiki\/lib\/', '\/var\/www\/twiki\/lib\/LocalLib.cfg'])

更新

这是固定代码:

代码语言:javascript
复制
subprocess.call(['sed', '-e', 's/\"\/absolute\/path\/to\/your\/lib\"/\/var\/www\/twiki\/lib\//', '/var/www/twiki/bin/LocalLib.cfg'])

最后,我漏掉了几个斜线,需要把其中一个砍成两倍。没有社区就搞不出来了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-14 16:10:29

代码语言:javascript
复制
subprocess.call(['sed', '-e', 's/\"absolute\/path\/to\/your\/lib\/\"\/var\/www\/twiki\/lib\/', '\/var\/www\/twiki\/lib\/LocalLib.cfg'])

看上去很恐怖。

第一件事:为什么要转义文件名参数上的/s?这在s命令中是必要的。

第二件事:如果我将分隔符从/替换为#,我可以省略所有不必要的转义。

我两次都做了,然后

代码语言:javascript
复制
subprocess.call(['sed', '-e', 's#"absolute/path/to/your/lib/"/var/www/twiki/lib/', '/var/www/twiki/lib/LocalLib.cfg'])

我看到了什么?命令中没有# (即没有未转义的/)。

试一试

代码语言:javascript
复制
's#"absolute/path/to/your/lib/"#/var/www/twiki/lib/#'

这里,或者如果您坚持使用/,请执行

代码语言:javascript
复制
's/"absolute\/path\/to\/your\/lib\/"/\/var\/www\/twiki\/lib\//'
                                  ^                          ^

/添加到^标记的位置。

编辑:我改变了"的立场,以反映我的误解的清除。见下面的评论。

票数 2
EN

Stack Overflow用户

发布于 2014-03-14 10:53:59

您可以做的另一件事是使用原始字符串表示法,注意下面示例中字符串前面的"r“。

代码语言:javascript
复制
import subprocess

COMMAND = r"""
    mysql -u root -h localhost -p --exec='use test; select 1, 2, 3 | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > sample.csv
"""

proc = subprocess.Popen(COMMAND, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
std_out, std_err = proc.communicate()

虽然这样做有效,但我这样做只是因为bash中有大量的这些命令,我想用python包装它。我更喜欢直接从python和csv模块使用mysql。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19981840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档